Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Spring security 主体在实现Authorities提取器后未显示权限_Spring Security - Fatal编程技术网

Spring security 主体在实现Authorities提取器后未显示权限

Spring security 主体在实现Authorities提取器后未显示权限,spring-security,Spring Security,我正在扩展AuthoritiesExtractor。在我的实现中,我添加了一个名为“MYROLE”的新权限。我在SecurityConfig.java中创建了一个bean(@bean),如下所示,用于初始化这个提取器,如下所示 @Configuration @EnableOAuth2Sso public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public AuthoritiesExtractor use

我正在扩展AuthoritiesExtractor。在我的实现中,我添加了一个名为“MYROLE”的新权限。我在SecurityConfig.java中创建了一个bean(@bean),如下所示,用于初始化这个提取器,如下所示

@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public AuthoritiesExtractor userAuthorityExtractor() {
return new UserAuthorityExtractor();
}  
My controller方法/me返回如下所示的主体对象

@RestController
public class UserController {
@GetMapping("/me")
public Principal currentUser (Principal principal) {
return principal;
}

返回的对象不显示权限“MYROLE”。我错过了什么

首先,在提取器中设置一个断点。你的代码甚至可以执行吗?我会在这里设置断点:

@Bean
public AuthoritiesExtractor userAuthorityExtractor() {
    return new UserAuthorityExtractor();
} 
如果答案是否定的,那么您需要弄清楚为什么您的bean没有被调用。我会确保您的
SecurityConfig
已被

至于你的控制器

在Spring Security中,无法保证
主体
对象也拥有权限。主体本身是一个非常简单的接口

/**
*返回此主体的名称。
*
*@返回此主体的名称。
*/
公共字符串getName();
因此,您需要的是
身份验证
对象,因为该接口公开
getAuthorities

@RestController
公共类用户控制器{
@GetMapping(“/me”)
公共主体currentUser(身份验证){
//向当局做你需要的事

Collection感谢您的响应。无论出于何种原因,SpringBoot没有调用我的提取器。我尝试将@Component添加到我的提取器中,将其作为bean添加,如代码所示,添加spring安全库。但迄今为止没有任何帮助,这取决于您的包结构。spring Boot应用程序将自动扫描包ge您的
@SpringBootApplication
类位于和子包中。如果您的SecurityConfig不在此范围内,请尝试添加
@ComponentScan
我已经用一些关于Spring Boot和@ComponentScan的信息补充了上面的答案。这是一个非常简单的项目。到目前为止,所有类都在同一个包中。此外,还选择了安全配置由于端点显示了我定义的限制。例如,未经身份验证的用户无法访问/me端点。对于经过身份验证的用户,它可以正常工作。public void configure(HttpSecurity http)下面的代码段引发异常{http.authorizeRequests().antMatchers(“/test”).hasRole(“Arcso.test”).antMatchers(“/admin”).hasRole(“arcso.admin”).antMatchers(“/me”).authenticated().anyRequest().permitAll()}代码有点难读懂。我会补充你的问题,也许会链接到一个测试项目。有两个部分需要放在适当的位置1.请求需要包含一个令牌,2.需要解析令牌(配置令牌解析)如果你发布一个小样本项目,我可以为你修改。我有类似的问题…在这里发布了我的解决方案。如果不是解决方案,我不想重复发布答案。如果有帮助,请告诉我。