Spring扩展认证对象以保持控制器干燥

时间:2019-01-22 16:28:50

标签: java spring spring-security

public List<MyObject> find( Authentication auth )
      //read details off the authentication object.
      OAuth2AuthenticationDetails oauthDetails= (OAuth2AuthenticationDetails) auth.getDetails();
      HashMap<String, Object> additionalInformationMap = ( HashMap<String, Object> )oauthDetails.getDecodedDetails();

我目前在控制器中有一小段代码,可以读取存储在JWT令牌中的其他信息。

最好不要用多种控制器方法编写此代码-可能会在整个代码库中使用它。

在Spring中是否有更好的方法可以做到,这不在控制器中。例如我可以在过滤器或其他内容中扩展Authentication对象,然后将多余的数据添加到扩展对象的公共方法中吗?

编辑。通过阅读,看来AOP可能会解决此问题。只是不确定从哪里开始

1 个答案:

答案 0 :(得分:1)

定义可以应用于方法和类的注释。如果将其应用于类,则注释将简单地级联并应用于该类中的所有方法。

public void readArguments() {

然后使用针对一系列切入点(适用于实际建议的位置)的建议(适用方法)创建一个类。 注意。这是在Groovy中实现的示例,该示例仅检查所有参数都不为null。但是,您可以更改方法的主体以执行所需的任何操作。一旦拥有package com.perfectcomputersolutions.pos.annotation; import org.springframework.stereotype.Component; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Component @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface NoNullArgs { } 数组,这些值便可以转换为所需的类型。

args