如何将自定义对象从自定义身份验证提供程序传递到控制器?

英尺

在春天,我想将在我的自定义身份验证提供程序中创建的对象传递给我的控制器。我怎样才能做到这一点?

@Component
public class CustomAuthProvider implements AuthenticationProvider {


@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {


    String email = authentication.getName();
    String password = authentication.getCredentials().toString();

    // check authentication here....

    // create custom object 

Object customObject = ...

return new UsernamePasswordAuthenticationToken(email,password, customObject);

}

在我的控制器中,我想使用这个自定义对象:

  @RequestMapping(value = "/user", method = RequestMethod.GET)
        public String test(Object customObject) {
    //use customObject here
}

我厌倦了以这种方式扩展 UsernamePasswordAuthenticationToken 来创建自定义令牌对象:

public class CustomAuthToken extends 

UsernamePasswordAuthenticationToken {

    //object of any class
    private Object customObject;

public CustomAuthToken(Object principal, Object credentials) {
    super(principal, credentials);
    this.customObject = null;

}

public CustomAuthToken(Object principal, Object credentials, Object customObject) {
        super(principal, credentials);
        this.customObject = customObject;
        }

当我在自定义身份验证提供程序中返回此令牌时,出现以下错误:

未找到 com.example.demo.security.CustomAuthToken 的 AuthenticationProvider

这是实现我想要的正确方法吗?我该如何解决这个错误?

英尺

好吧,我找到了解决我的问题的方法。这是我所做的修复:

在 CustomAuthToken 类中,编辑了扩展类的构造函数。我需要使用 3 个参数、主体、凭据和权限创建 UsernamePasswordAuthenticationToken :

public class CustomAuthToken extends UsernamePasswordAuthenticationToken {

    private Object object;

    public CustomAuthToken(String principal, String credentials,  Collection<? extends GrantedAuthority> authorities, Object object) {
            super(principal, credentials, authorities);

            this.object = object;
    }

}

在 CustomAuthProvider 类中,返回带有正确参数的 customAuthToken 对象:

... return new CustomAuthToken(email,password, new ArrayList<>(), object); ...

在控制器中,设置正确的身份验证类型参数:

@RequestMapping(value = "/user", method = RequestMethod.GET)
    public String test(CustomAuthToken auth) {
System.out.println(auth.object.ToString());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将自定义信息从App Engine身份验证器传递到端点?

如何将自定义身份验证提供程序集成到IdentityServer4中

Spring-从控制器调用自定义身份验证提供程序

Rails / ActiveAdmin - 如何将自定义数据从控制器传递到内容中

如何将实体对象从自定义验证注释传递给控制器

如何将自定义模型对象从剃刀视图传递到ASP.NET MVC 5中的控制器操作

将自定义对象传递给经过身份验证的路由

Haskell Servant将自定义数据传递给身份验证处理程序

未调用自定义身份验证提供程序

将自定义表单值传递给自定义控制器操作

Spring Security中的自定义身份验证控制器

我无法控制/无法访问的Firebase自定义身份验证提供程序?

如何将Firebase自定义身份验证与openID提供程序一起使用?

如何在Umbraco 7.5.8中将自定义模型发布到控制器?

如何通过Symfony 3身份验证使用自定义用户提供程序

如何将自定义对象arraylist从活动传递到带有实例的片段

如何将自定义对象从活动传递到片段?

如何将自定义路由器传递到Symfony捆绑包中的服务?

将数组对象从控制器传递到AngularJS中的自定义指令

将实例变量从设计控制器传递到自定义邮件程序?

将变量从Devise控制器传递到自定义邮件程序?

如何将自定义消息添加到Firebase Google身份验证弹出窗口?

Spring Security-从自定义登录页面调用自定义身份验证提供程序

如何将CGRect帧值传递给自定义过渡动画控制器

Rails 4 + Rspec:使用REST API的父控制器进行自定义身份验证的DRY测试吗?

将自定义单元格图像视图图像传递到新的视图控制器

Firebase自定义身份验证传递令牌

无法为Spring安全性提供自定义身份验证提供程序

如何从自定义中间件将依赖项传递到控制器?