当前位置: 首页 > 知识库问答 >
问题:

Spring Security Ouath2:主体对象未返回Extended UserDetails

邴墨竹
2023-03-14

根据这个问题,这是登录失败的结果。AuthenticationToken(在本例中是UsernamePasswordAuthenticationToken)被AuthenticationManager拒绝。我不知道它为什么要做这样的事。默认UserDetails对象的身份验证似乎工作得很好。有人能帮我解决这个问题吗?

关于已实现类的一些细节(如上所述)。由于原因,这里遗漏了一些代码。

CustomUserDetails

public class CustomUserDetails extends User {

  private final Integer custom;

  public CustomUserDetails (...default params..., Integer custom) {
    super(...default params...);
    this.custom = custom;
  }
}

CustomUserDetailsService

@Service
public class CustomUserDetailsService implements UserDetailsService {
  @Override
  public CustomUserDetails loadUserByUsername(String username) throw UsernameNotFoundException {
    return new CustomUserDetails(...default params..., 12345);
  }
}
@Autowired
private CustomUserDetails userDetails;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  auth.userDetailsService(userDetails);
}
@RequestMapping(value = "/user", method = RequestMethod.GET)
@ResponseBody
public Principal getDetails(Principal user) {
  return user;
}

提前谢了。

共有1个答案

章晗日
2023-03-14

通常,您需要注释@authenticationPrincipal,但我建议您构建自己的注释,如下所示:

/**
 * Our own {@link AuthenticationPrincipal} annotation as suggested by
 * http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#mvc-authentication-principal
 *
 */
@Target({ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AuthenticationPrincipal
public @interface CurrentUser {}

然后您可以通过以下方式拥有这个主体:

@RequestMapping(..)
public Principal test(@CurrentUser Principal principal){..}

但是,您应该有自己的主体Impl,或者更确切地说,扩展现有的Impl。类似于这样:

public MyPrincipal extends org.springframework.security.core.userdetails.User {..}
 类似资料:
  • 问题内容: 我有以下简单的看法。为什么会导致此错误? 问题答案: 因为视图必须 返回 ,而不仅仅是调用它。将最后一行更改为

  • 我有一个线程池为10的executor服务,我希望得到10条打印输出语句,它们之间的间隔为3秒,但我只收到一条打印输出语句。我传递了10作为参数,所以我希望运行10个线程。如何检索未来的10个对象? 我得到的输出是: 线程执行前 结果:123 ArrayList中的期货:123

  • data String - PEM编码数据 issuer CertificatePrincipal - 发行人主体 issuerName String - 发行商的公用名 issuerCert证书 - 颁发者证书(如果不是自签名) subject CertificatePrincipal - 主题主体 subjectName String - 主题公共名 serialNumber String -

  • 我使用的是Spring版本4(Spring data),我想将Object作为JSON返回,我想知道以下代码即使不使用xmlRootElement注释用户类也能工作: 任何机构都可以解释吗?当我需要注释要返回为JSON的对象类时,响应体/响应实体是否自己完成工作?

  • 我使用mysql存储过程来检索对象列表。这可能吗? 我在看这篇文章 问题: > 如何使用结果集检索select语句中的对象列表? 如何将结果集映射到对象列表? CREATE DEFINER=@PROCEDURE(ININT,OUTINT,OUTINT,OUTVARCHAR(50),OUTVARCHAR(50),OUTFLOAT 内部连接(从rate中选择aid,r.rate,re.country_

  • 我实现了一个函数,希望返回保存在某个url下的对象。在下面的代码中,第一个“console.log(result);”从firebase位置返回正确的对象。第二个返回未定义。有人能解释一下为什么以及如何修复它吗?