我被这个JavaSpring Boot问题困住了。我已经在loadUserByUsername方法的返回语句中填写了自动权限:this.get权限(user)。但是当我打印身份验证对象时,它说授予权限为空:
UsernamePasswordAuthenticationToken[Principal=mark,Credentials=PROTECTED],Authenticated=true,Details=null,授予的权限=[]]
有人知道吗?
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) throw new UsernameNotFoundException(username);
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), this.getAuthorities(user));
}
@GetMapping(path = "authenticated")
@PreAuthorize("hasAuthority('ROLE_DEFAULT')")
public User getAuthenticatedUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
System.out.println(auth);
User user = this.getUserByUsername(auth.getPrincipal().toString());
return user;
}
private Collection<GrantedAuthority> getAuthorities(User user) {
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority(user.getRole()));
return authorities;
}
我也遇到了这个问题。我有一个自定义的用户凭据实现org.springframework.security.core.userdetails.用户详细信息
,其中get授权()实现返回值-但注意到工作授权数组是空的:
o.s.s.w.a.i.FilterSecurityInterceptor:317 - Re-authenticated UsernamePasswordAuthenticationToken [Principal=dto.UserCredentials@585027b7, Credentials=[PROTECTED], Authenticated=true, Details=null, **Granted Authorities=[]**] before authorizing
问题是我的身份验证提供者的实现是错误的,它返回:
new UsernamePasswordAuthenticationToken(userCredentials, authentication, Collections.emptyList());
new UsernamePasswordAuthenticationToken(userCredentials, authentication, **userCredentials.getAuthorities()**);
我正在构建一个Android应用程序,使用OAuth将用户登录到GitHub。我按照这里的指示这样做。作为过程的第一部分,我将用户发送到URL 但是,当我在我的Android设备上登录时,按钮显示为灰色,我无法点击它。有人知道这是为什么吗?(下方大截图) 我想这个按钮以前可能没有灰色,在我第一次运行应用和登录的时候。不过,因为赶时间,也说不清。
我目前正在处理一组应用程序,这些应用程序运行在两个独立但等效的环境中(称为和)。我一直在使用OAuth 2.0进行授权,当我从OAuth服务请求访问令牌后收到响应时(我正在通过Postman进行请求),我会从和得到如下响应: 据我所知,我相信这个< code >“token _ type”:“Bearer”意味着当我向我的应用程序发送< code>access_token时,我需要这样做: 通过前
例如,当我有一个post方法-登录时,我得到了签名的JSON Web令牌。我在youtube上看了一些教程,当他们检查用户是否被授权时,他们会在授权标头中发送JWT,例如: 不记名令牌 我的问题是:当同样的事情在工作时,如果我们只发送授权标头中的令牌,而没有令牌前面的“持有人”,他们为什么要这样做?
为什么我在Maven中会出现“401未授权”错误? 以下是调用(底部为完整日志)时出现的错误: 根据这个sonatype支持页面: “如果您收到401,那是因为maven发送了错误的登录凭据,或者根本没有凭据。” 下面是我采取的步骤,下面是我完整的和文件,下面是和的完整日志。 我使用中的用户/pass成功地登录和退出了sonatype.org网站。 我尝试使用手动部署工件,使用命令 但出现了以下错
我想向我的节点添加文档。js API,为此,我有一个YAML文件,我把我的定义放在那里,swagger文档位于localhost:5000/API doc,运行良好。 现在,我必须用以下定义添加Bear authorization but Swagger: 在测试请求时(我点击右上角的“授权”按钮并输入我的令牌),我得到以下错误: “错误”:“未找到授权标头”。 为什么请求中不包括标题?
我的问题是:为什么这是流动?我想是出于安全原因,但我想不通。为什么实现是这样的,而不是在第一次调用(“/authorize”)之后立即获得访问令牌? 我们为什么需要这个代码?