![](/img/trans.png)
[英]Spring Boot Actuator Endpoints security doesn't work with custom Spring Security Configuration
[英]Spring security authentication without spring boot doesn't work as opposed to with spring boot and similar configuration
正常运行的Spring Boot + Spring Security应用程序将其用于请求映射:
@SpringBootApplication
public class SampleLDAPApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SampleLDAPApplication.class, args);
}
@Bean
public WebMvcConfigurerAdapter adapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login")
.setViewName("login");
}
};
}
}
这是安全配置:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication().userSearchBase("ou=Users").userSearchFilter("(uid={0})")
.groupSearchBase("ou=bla,ou=Roles").groupSearchFilter("(roleOccupant={0})")
.contextSource().root("dc=ops,dc=blabla,dc=com").url("ldap://192.168.1.57:389/dc=ops,dc=blabla,dc=com");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/", "/home").permitAll().anyRequest().authenticated();
http.formLogin().loginPage("/login").permitAll().and().logout().logoutSuccessUrl("/");
}
}
这是登录页面:
<div class="content">
<h2>Login with Username and Password</h2>
<form name="form" th:action="@{/login}" method="POST">
<fieldset>
<input type="text" name="username" value="" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
</fieldset>
<input type="submit" id="login" value="Login"/>
</form>
</div>
每当我访问保留的/secure
URL时,应用程序就会正确地将我重定向到登录页面以进行身份验证。
我的不带Spring Boot的Spring Security Web应用程序使用以下控制器进行请求映射:
@Controller
@RequestMapping("/")
public class UserController {
@RequestMapping(value = "login")
public String login() {
return "login";
}
}
安全配置与Spring Boot应用程序的安全配置完全相同,唯一的区别是附加的@EnableWebSecurity
批注。
没有Spring Boot的应用程序视图部分的唯一区别是,与Spring Boot一样,我使用JSP代替Thymeleaf:
<form action="/login" method="POST">
<fieldset>
<input type="text" name="username" value="" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
</fieldset>
<input type="submit" id="login" value="Login">
</form>
但是现在当我进入/secure
,我的应用程序错误地为我提供了该页面,而不是重定向到登录页面。 为什么会这样?
答案是,Spring Boot很简单,Spring本身没有那么多。 我的SecurityConfig
类未向WAR注册。 因此,为了做到这一点,在与SecurityConfig
相同的程序包中,我必须创建3个类。
这个:
import org.springframework.security.web.context.*;
public class MessageSecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
这个:
@Configuration
@ComponentScan
public class RootConfiguration {
}
和这个:
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
为什么要这样做,在Spring Guide中有详细说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.