Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有所需角色的用户被拒绝_Java_Spring Security - Fatal编程技术网

Java 具有所需角色的用户被拒绝

Java 具有所需角色的用户被拒绝,java,spring-security,Java,Spring Security,我有以下配置文件: //授权书 @凌驾 受保护的无效配置(HttpSecurity http)引发异常{ http .csrf().disable(); http .httpBasic() .及() .授权请求() .antMatchers(“/home”、“/”).permitAll() .antMatchers(“/api/example1/**”).hasAnyRole(管理员访问,example1用户,example1管理员) .antMatchers(“/api/example2/*

我有以下配置文件:


//授权书
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.csrf().disable();
http
.httpBasic()
.及()
.授权请求()
.antMatchers(“/home”、“/”).permitAll()
.antMatchers(“/api/example1/**”).hasAnyRole(管理员访问,example1用户,example1管理员)
.antMatchers(“/api/example2/**”).hasAnyRole(管理员访问,example2用户,example2管理员)
.anyRequest().authenticated()
.及()
.formLogin()
.loginPage(“/login”).permitAll()
.usernameParameter(“用户名”)
.passwordParameter(“pass”)
.defaultSuccessUrl(“/home”)
.及()
.logout()
.invalidateHttpSession(真)
.clearAuthentication(true)
.logoutRequestMatcher(新的AntPathRequestMatcher(“/logout”))
.logoutSuccessUrl(“/login”)
.permitAll()
.及()
.rememberMe()
.tokenValiditySeconds(600)
.key(“secretKey”)
.rememberme参数(“checkRememberMe”);
}
我使用此用户登录,请注意,它具有
角色\u ADMIN
(基本上,访问所有内容):

{
“用户名”:“测试”,
“通过”:“测试”,
“角色”:“角色\管理员”,
“权限”:“,
“公司”:“测试”
}
通过Thymeleaf表单正确登录。但是,每当我尝试访问锁定在角色后面的端点时,都会出现错误500

我在控制器中尝试了不同的注释,如您所见:

@RestController
@请求映射(“/api/example1”)
@预授权(“hasAnyRole('ROLE\u ADMIN'、'ROLE\u EXAMPLE1\u USER'、'ROLE\u EXAMPLE1\u ADMIN'))
公共类MyController{
@自动连线
私人MyService服务;
@GetMapping(“/getAll”)
公共列表get(){
return service.get();
}
@GetMapping(“/getAllAuth”)
@预授权(“hasAuthority('ROLE\u EXAMPLE1\u ADMIN')或hasAuthority('ROLE\u ADMIN'))
公共列表getAuth(){
return service.get();
}
@GetMapping(“/getAllAuth2”)
@预授权(“hasAnyRole('ROLE\u EXAMPLE1\u ADMIN'、'ROLE\u ADMIN'))
公共列表getAuth2(){
return service.get();
}
}
然而,我在所有这些方面都被否定了。我尝试使用角色和权限

为了澄清起见,
EXAMPLE1\u USER==ROLE\u EXAMPLE1\u USER
,其他人也一样。我确保这不是打字错误


知道问题可能是什么吗?

我通过将批注和安全文件中的
hasAnyRole
更改为
hasAnyAuthority
成功解决了问题。

A 500是一个内部服务器错误,而不是身份验证问题。在这种情况下,你应该在服务器上有一个堆栈跟踪。嗯,我没有在终端上得到任何错误,但我注意到我没有得到很多跟踪/日志(我对spring boot有点陌生)。也许“默认”运行隐藏了其中的大部分?如果是这样,我如何检查所有记录道?取决于您的记录器。如果您在默认情况下使用SpringBoot,您应该会看到信息和错误消息。您使用的是弹簧启动启动器吗?如果您使用的是spring boot 1.x,您可能需要添加一个依赖项。我没有使用任何spring boot starter。我看到了信息和警告日志,但仅在启动时,我没有看到任何其他重要的日志(除了hibernate的成功查询之外)。可能您有一个错误处理程序正在处理错误。您可以尝试附加调试器并在捕获到异常时停止。否则,您可能会尝试准确地隔离失败的代码并编写测试。