我正在使用Spring Boot和Thymeleaf。我在src/main/resources/templates/error/404.html
当用户登录时,此功能正常。
但是,当他们退出时,他们没有获得任何类型的404页面,他们只是被重定向回/login
。
我认为我的安全配置需要改变但不确定是什么。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/","/register*","/resetPassword","/forgotPassword","/login","/404").permitAll()
.antMatchers("/admin/**").hasAuthority("ADMIN").anyRequest()
.authenticated().and().formLogin().loginPage("/login").failureUrl("/login?error")
.defaultSuccessUrl("/dashboard").successHandler(successHandler)
.usernameParameter("email").passwordParameter("password")
.and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login?logout").and()
.exceptionHandling().accessDeniedPage("/access-denied");
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/error**","/resources/**", "/static/**", "/css/**", "/js/**", "/img/**");
}
答案 0 :(得分:2)
首先,我建议您在使用java配置为spring应用程序配置安全性时使用缩进。它有助于提高可读性。
注意第一个缩进(authRequest,formLogin,logout)上的所有顶级方法都会自行配置/更新HTTP对象。所有这些元素都来自org.springframework.security.config.annotation.web.builders.HttpSecurity
类。
这些类的子级进一步细化了HTTP安全性配置。
http
.authorizeRequests()
.antMatchers("/","/register*","/resetPassword","/forgotPassword","/login","/404")
.permitAll()
.antMatchers("/admin/**").hasAuthority("ADMIN")
.anyRequest().authenticated() // <--------
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login?error")
.defaultSuccessUrl("/dashboard")
.usernameParameter("email").passwordParameter("password")
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login?logout")
.and()
.exceptionHandling()
.accessDeniedPage("/access-denied");
注意.anyRequest().authenticated()
具体说明必须对任何请求进行身份验证。因此,当您尝试在您的域上转移任何丢失的URL时,它会要求您登录而不是转到404页面。
因此,如果您删除该语句,然后尝试转到丢失的网址页面,则会将您重定向到404页面。
答案 1 :(得分:0)
如果您删除 .anyRequest().Authenticated() 则您无需经过身份验证即可登录。
因此,不要尝试删除。例如,如果您访问地址“http://localhost:8080/user”,那么您将被带到授权页面。如果您尝试输入页面“http://localhost:8080/user/”,那么您将被带到用户页面。请注意,链接的区别仅在于末尾的正斜杠。当然,如果在这种情况下删除“.anyRequest().Authenticated()”,则需要向 antMatchers 添加更多参数,例如“/user”和“/user/”
因此,要小心谨慎。