繁体   English   中英

Java Spring 安全hasAnyAuthority不起作用

[英]Java Spring Security hasAnyAuthority doesn't works

我有一个 spring 宁静的应用程序,后端 - Spring 2.4.3,前端 - Angular,当我尝试限制对单个页面的访问时,我得到了。 我已经尝试了 hasRole () 和 hasAuthority () 的所有变体,没有任何帮助。 我究竟做错了什么?

安全配置.java

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/", "/login", "/registration").permitAll()
            .antMatchers("/profile","/profile/*").hasAnyAuthority("USER","ADMIN","INTERVIEWER")
            .antMatchers("/getAllUsers").permitAll()
            .anyRequest().authenticated();
    http
            .csrf().disable()
            .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            /*.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class)*/
            .cors();
}

角色.java

@XmlType
@XmlEnum
public enum Role implements GrantedAuthority {
    ADMIN,
    USER,
    INTERVIEWER;

    @Override
    public String getAuthority() {
        return this.name();
    }
}

结果:

Результат :(

有事吗:(

根据您提供的代码, .addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class)行被注释掉。 我无法谈论取消注释该行时会发生什么(因为它是自定义过滤器),但是没有该行,您将无法进行身份验证。 这会导致调用您的入口点(在您的示例中未提供),并且似乎正在返回您的 401 状态代码。

您可以通过注释掉以下行来测试它:

            .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint())
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()

并添加.formLogin().and()代替。 表单登录将提供默认身份验证入口点、默认身份验证过滤器和(如果使用 spring 引导)默认用户详细信息服务,其中随机生成的密码打印到您的控制台,您可以使用它来测试登录。有关更多信息,请参阅文档对此。

关于使用 hello world(开箱即用)配置进行测试的说明:使用formLogin()测试授权规则是一种非常有用的技术(例如.antMatchers("/profile","/profile/*").hasAnyAuthority("USER","ADMIN","INTERVIEWER") ) 在 Spring 安全性中。 它使您可以消除身份验证机制的问题。 一旦您确信您的授权规则有效,您就可以继续配置您自己的身份验证方案。 如果可能,请寻求利用 Spring Security 提供的现有方案,并且仅在无法使用开箱即用方案时创建自定义过滤器。 您可以在文档中阅读有关JWT 身份验证的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM