Java Spring security db UserDetails服务不支持';不要考虑用户的角色

Java Spring security db UserDetails服务不支持';不要考虑用户的角色,java,spring,security,login,Java,Spring,Security,Login,我有一个玩具web应用程序,我想在其中登录从数据库中获取的用户 它可以工作,但是,我可以使用一个用户角色登录,我应该只使用一个具有管理员角色的用户登录 这是我的密码: Servlet 3.0引导程序 public class Bootstraper extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClas

我有一个玩具web应用程序,我想在其中登录从数据库中获取的用户

它可以工作,但是,我可以使用一个用户角色登录,我应该只使用一个具有管理员角色的用户登录

这是我的密码:

Servlet 3.0引导程序

public class Bootstraper extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{JPAConfig.class, WebSecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[]{MvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[]{new DelegatingFilterProxy("springSecurityFilterChain"), new OpenEntityManagerInViewFilter()};
    }
}
My custome UserDetails服务:

@Service
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private UsersService usersService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = usersService.getUser(username);
        if (user != null) {
            List<GrantedAuthority> authorityList = user.getRoles().stream()
                    .map(role -> new SimpleGrantedAuthority(role.getRole()))
                    .collect(Collectors.toList());

            return new org.springframework.security.core.userdetails.User(username, user.getPassword(), user.isEnabled(), true, true, true, authorityList);
        }

        return null;
    }
}
问题是,伙计们,我说我希望每个用户都有一个管理员角色,但我仍然可以用一个只有用户角色的用户登录。我不明白为什么

我已经进行了调试,我的用户成功地从数据库中获取,一切正常,但我不知道Spring在哪里检查角色


关于,

请从配置中删除您的
.anyRequest().authenticated()
,因为如果您请求角色检查用户必须经过身份验证,则在通过安全筛选器检查时,它显然具有优先权,如user3030447在评论中所述:

角色必须以角色\开头

e、 g.如果您想使用
hasRole('EDIT')
您必须创建如下授权:

new SimpleGrantedAuthority("ROLE_EDIT");

您可以使用
hasAuthority()
hasAnyAuthority()
函数。

启用调试日志记录(log4j.logger.org.springframework.security=debug,stdout,fileout-for log4j),它会告诉您很多。请将
ROLE\u ADMIN
更改为
ADMIN
,然后重试。@Mithun访问函数不需要“ROLE\uj”。请参阅@Evgeni-感谢您的更正。我还必须将角色添加到从数据库获得的角色中,但现在它可以工作了。如果我让你说的话,那么我可以在任何地方对每个角色进行身份验证,这样你就对了,谢谢。
@Service
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private UsersService usersService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = usersService.getUser(username);
        if (user != null) {
            List<GrantedAuthority> authorityList = user.getRoles().stream()
                    .map(role -> new SimpleGrantedAuthority(role.getRole()))
                    .collect(Collectors.toList());

            return new org.springframework.security.core.userdetails.User(username, user.getPassword(), user.isEnabled(), true, true, true, authorityList);
        }

        return null;
    }
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private static final Logger LOGGER = LoggerFactory.getLogger(WebSecurityConfig.class);

    @Autowired
    private MyUserDetailsService userDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                .antMatchers("/resources/**").permitAll()
                .anyRequest().authenticated()
                .antMatchers("/**").access("hasRole('ROLE_ADMIN')")
                .and().formLogin()
                .loginPage("/login")
                .permitAll().and()
                .logout().permitAll();

        http.csrf().disable();
    }
}
new SimpleGrantedAuthority("ROLE_EDIT");