Spring Boot + Security(hasRole和hasAuthority)不起作用

时间:2018-01-02 10:05:28

标签: spring spring-boot spring-security

我的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();
    }
}

然后,我有这样的UserDetailsS​​erviceImpl(我已经把“教师”权限)。

@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,因此安全性无效。

有什么想法吗?感谢

0 个答案:

没有答案