在将Spring Security Principal注入RestController方法之前,是否有办法对其进行转换?
假设我定义了以下类:
@RestController
public class MyController {
@GetMapping("/test")
public void getWithPrincipalA(@AuthenticationPrincipal PrincipalTypeA a) {
...
}
@GetMapping("/test")
public void getWithPrincipalB(@AuthenticationPrincipal PrincipalTypeB b) {
...
}
}
我知道这些控制器方法是模棱两可的,我可以做一些事情来解决这个问题,但是我更愿意做的是将@AuthenticationPrincipal
转换成我可以定义自己的某种类型。结果将变为:
@RestController
public class MyController {
@GetMapping("/test")
public void getWithTransformedPrincipal(@AuthenticationPrincipal MyTransformedPrincipal principal) {
...
}
}
现在,我基本上可以为多个不同的身份验证主体定义一个控制器,而无需更改API。
任何帮助将不胜感激:)
答案 0 :(得分:2)
要使事情保持简单和透明,您可以简单地在控制器方法中转换主体,然后从那里分派泛型主体。
@RestController
public class MyController {
@GetMapping("/test")
public void getWithTransformedPrincipal(@AuthenticationPrincipal Principal principal) {
GenericPrincipal generic = PrincipalTransformer.transform(principal);
doSomethingWithPrincipal(generic);
}
}