我今天一直在使用Spring Security进行注册/登录,但仍然可以使用它。
我的配置是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.antMatchers("/login").permitAll()
.antMatchers("/registration").permitAll()
.antMatchers("/viewGamers").permitAll()
.antMatchers("/gameLibrary").permitAll()
.antMatchers("/admin/**").hasAuthority("ADMIN").anyRequest()
.authenticated().and().csrf().disable().formLogin()
.loginPage("/login").failureUrl("/login?error=true")
.defaultSuccessUrl("/gamer/home")
.usernameParameter("email")
.passwordParameter("password")
.and().logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/").and().exceptionHandling()
.accessDeniedPage("/access-denied");
}
据此我读到,如果您去/admin/anything
,则必须分配一个ADMIN
角色。正确吗?
我没有处理它的控制器中的逻辑检查,当通用的非管理员角色用户能够进入/admin/home
页面时,我感到有些惊讶。
我在数据库中添加了一个新角色,请确保该用户具有与该角色相关联的角色,但它仍然可以访问管理页面,对吗?
我已经运行了一些printlns并可以确认角色正确。我在配置中犯了错误吗?还是需要 admin / home控制器中if (user.role != "Admin") { send elsewhere }
的附加逻辑?
谢谢。
答案 0 :(得分:2)
问题出在您的配置中,您应该从受限制较大的安全性开始,到受限制较少的安全性配置。 因此将顺序更改为:
.antMatchers("/login").permitAll()
.antMatchers("/registration").permitAll()
.antMatchers("/viewGamers").permitAll()
.antMatchers("/gameLibrary").permitAll()
.antMatchers("/admin/**").hasAuthority("ADMIN")
.antMatchers("/**").permitAll() // this will allow everything that passes all above cnofigs
通知我删除了.anyRequest().authenticated()
,因为其中包含.antMatchers("/**").permitAll()
,如果您希望对所有请求进行身份验证,则可以将其替换。