我有一个简单的WebSecurityConfiguration
配置类,它定义了我的应用程序在安全级别上的工作方式。
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/register", "/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login?error")
.passwordParameter("password")
.usernameParameter("emailAddress")
.successHandler(authenticationSuccessHandler())
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/")
.permitAll()
.and()
.httpBasic();
}
@Bean
public SavedRequestAwareAuthenticationSuccessHandler authenticationSuccessHandler() {
return new SavedRequestAwareAuthenticationSuccessHandler();
}
}
我还有一个@Controller
,它定义了两个简单的端点
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getHome() {
return "home";
}
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void testEndpoint() throws CreateException {
return "test";
}
}
加载应用程序并导航到localhost:8080/test
时,我会按预期重定向到登录表单。但是,当我导航到localhost:8080/
或localhost:8080
(没有转发)时,我会看到“主页”页面,我希望将其重定向到localhost:8080/login
。
我尝试将.antMatcher("/**")
更改为.antMatcher("**")
,但这也没有达到预期的效果。
答案 0 :(得分:0)
问题在于,.formLogin()
和.logout()
以.permitAll()
结尾。这允许根localhost:8080
在未经过身份验证的情况下通过。
删除它们已解决了这个问题。