我的Spring Boot和Spring Security存在角色和权限问题。
我有三种可能的角色(“管理员”,“老师”,“学生”)。
我有这个简单的类
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
BCryptPasswordEncoder encoder = passwordEncoder();
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.antMatchers("/admin/**").hasAuthority("Admin")
.antMatchers("/alumno/**").hasAuthority("Student")
.antMatchers("/profesor/**").hasAuthority("Teacher")
.and()
.formLogin()
.usernameParameter("email")
.passwordParameter("password")
.loginProcessingUrl("/j_spring_security_check") // Submit URL
.loginPage("/login").failureUrl("/login?error=true")
.defaultSuccessUrl("/admin/home")
.permitAll()
.and()
.logout()
.permitAll();
}
}
然后,我有这样的UserDetailsServiceImpl(我已经把“教师”权限)。
@Service
public class UserDetailsServiceImpl implements UserDetailsService{
@Autowired
private UsuarioDao usuarioDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UsuarioEntity usuarioEntity = usuarioDao.findByUsuario(username);
Set<GrantedAuthority> grantedAuthorities = new HashSet();
grantedAuthorities.add(new SimpleGrantedAuthority("Teacher");
User user = new User(usuarioEntity.getUsuario(),usuarioEntity.getPassword(), grantedAuthorities);
return user;
}
}
然后,我的控制器:
@RequestMapping(value="/admin/home", method = RequestMethod.GET)
public ModelAndView home(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("adminMessage","Content Available Only for Users with Admin Role");
modelAndView.setViewName("admin/home");
return modelAndView;
}
当我像“老师”这样的用户登录时,我可以查看/ admin / home,我无法理解这个问题。
我会改变这个:
.antMatchers("/admin/**").hasRole("Admin")
.antMatchers("/alumno/**").hasRole"Student")
.antMatchers("/profesor/**").hasRole("Teacher")
这一个:
grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_Teacher");
我想当我使用“Teacher”滚动时,应用程序会给我一个错误,但我可以登录到/ admin / home,因此安全性无效。
有什么想法吗?感谢