![](/img/trans.png)
[英]Spring Security using java config doesn't submit the login page
[英]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.