所以我有一个带有许多api请求的Spring boot应用程序。
对于大量此类请求,我知道要记录请求中标头的“用户代理”部分。
一种解决方案是这样做。
在我的控制器中,我可以只放@RequestHeader("user-agent") String userAgent
并将其传递到服务层以进行记录。
但是,如果我可以将用户代理添加为全局变量,就像通过SecurityContextHolder将用户名添加为全局变量一样,将会更加方便。
所以我的问题是,是否可以从Authentication过滤器类添加自定义全局上下文变量,例如身份验证详细信息?如果可以的话?
答案 0 :(得分:1)
如果您使用的是Spring MVC,则可以自动装配HttpServletRequest
并从中获取请求标头。
@Service
public class HelloService {
@Autowired
private HttpServletRequest httpServletRequest;
public void print() {
System.out.println(httpServletRequest.getHeader("x-test"));
}
}
或者,您也可以从RequestContextHolder
获取请求实例:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getHeader("x-test");