无法使用userDetailsS​​ervice授权

时间:2019-04-01 07:18:38

标签: spring-security

我正在学习Spring Security,这是我的configure类,非常简单:

@Configuration
@EnableWebSecurity
public class Config extends WebSecurityConfigurerAdapter {

    @Autowired
    MyUserDetailsService myUserDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(myUserDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/")
                  .permitAll()
                .antMatchers("/users")
                  .hasRole("isAdmin")
                .antMatchers("/articles")
                  .hasRole("isUser")
                .and()
                .formLogin()
                  .permitAll();
    }
}
import org.springframework.security.core.userdetails.User;
@Service
public class MyUserDetailsService implements UserDetailsService  {

    @Autowired
    UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {

        List<SimpleGrantedAuthority> simpleGrantedAuthorities = new ArrayList<>();
        simpleGrantedAuthorities.add(new SimpleGrantedAuthority("isUser"));
        return new User(username, "{noop}123456", simpleGrantedAuthorities);

    }
}

通过这种配置,我允许任何人使用任何用户名和特定密码123456登录,并为每个用户赋予isUser角色。

我希望任何人都可以使用任何用户名登录并获得访问/articles的许可。

但是很不幸,当我尝试登录时,是的,登录成功,但是无法访问/articles

我找不到原因,我想已经授予了用户许可,怎么了?

1 个答案:

答案 0 :(得分:1)

答案可以在hasRole方法(link)的javadoc中找到:

  

用于指定URL的快捷方式需要特定的角色。如果你不   想要自动插入“ ROLE_”,请参见hasAuthority(String)。

     

参数:role-需要的角色(即USER,ADMIN等)。注意,   它不应以“ ROLE_”开头,因为它会自动插入。

因此,可以在角色ROLE_中添加isUser前缀,或者使用hasAuthority方法而不是hasRole