java - Spring Security主体转换

标签 java spring rest spring-security

有没有办法在将 Spring Security 主体注入(inject) RestController 方法之前对其进行转换?

假设我定义了以下类:

@RestController
public class MyController {
    @GetMapping("/test")
    public void getWithPrincipalA(@AuthenticationPrincipal PrincipalTypeA a) {
        ...
    }

    @GetMapping("/test")
    public void getWithPrincipalB(@AuthenticationPrincipal PrincipalTypeB b) {
        ...
    }
}

我知道这些 Controller 方法不明确,我可以做一些事情来解决这个问题,但我宁愿做的是将 @AuthenticationPrincipal 转换为我可以自己定义的某种类型。结果会变成这样:

@RestController
public class MyController {
    @GetMapping("/test")
    public void getWithTransformedPrincipal(@AuthenticationPrincipal MyTransformedPrincipal principal) {
        ...
    }
}

现在我基本上可以为多个不同的身份验证主体定义一个 Controller ,而无需更改 API。

如有任何帮助,我们将不胜感激:)

最佳答案

为了让事情变得简单和透明,您可以简单地转换 Controller 方法中的主体并从那里分派(dispatch)通用主体。

@RestController
public class MyController {
    @GetMapping("/test")
    public void getWithTransformedPrincipal(@AuthenticationPrincipal Principal principal) {
        GenericPrincipal generic = PrincipalTransformer.transform(principal);
        doSomethingWithPrincipal(generic);
    }
}

关于java - Spring Security主体转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53391811/

相关文章:

eclipse - 'gradle eclipse'之后,Spring项目中的空验证消息

java - 从 mysql 数据库获取时出现空指针异常

java - 用于无效 Json 字符串的 Jersey 自定义异常映射器

Java - 一般处理子类的创建

java - App Engine 数据存储区中 Blob 的实际大小

java - 如何在Lucene 6.2.0的CustomAnalayzer中使用SynonymMap

spring - 我应该在哪里包装我的 REST 响应、 Controller 或服务?

java - 如何使用(导入)com.aldebaran.qi.helper.proxies.*;在 android studio 上,以便它可以在我的手机上运行?

java - 如何使用 @Transactional 方法将 jmockit 的模拟对象注入(inject)到 spring 管理的对象中?

java - 如何在java配置中获取外部定义的bean