将HttpServletResponse注入服务层的最佳方法
我知道这可能不是针对此类问题的最佳设计,而只是针对特定要求。
目前的应用需求ServletContext
,HttpServletRequest
,HttpServletResponse
在为服务层customized
authentication provider。
显然没有以下代码的任何特定配置或继承:
@Component("myAuthenticaionProvider")public class MyAuthenticaionProvider implements AuthenticationUserDetailsService {
@Autowired private ServletContext context;
@Autowired private HttpServletRequest request;
@Autowired private HttpServletResponse response;
.......
}
必须抛出异常:
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:No matching bean of type [javax.servlet.http.HttpServletResponse] found for dependency:
我能想到的可能解决方案:
拦截
HttpServletRequest
过滤器,但需要URL模式,否则将拦截所有我认为可能与性能有关的URL?request
在spring-security.xml或application-context.xml中创建一个作用域bean,然后注入到当前的身份验证提供程序类中,以使其能够获取HttpServletRequest
。但是我认为这里有问题,例如如何启动请求范围bean?
那么最佳实践是什么?
回答:
除了成为“坏主意”之外,请求对象的生存时间仅与请求一样长。由于生命周期的差异,您无法将其注入单个实例。您可以通过方法参数将其传递。
与您的请求最接近的解决方案是在一个catch
all过滤器内创建一个ThreadLocal变量,然后在其中进行设置,然后将该过滤器或委托给本地线程来注入您的服务。我强烈建议您避免这种情况。
以上是 将HttpServletResponse注入服务层的最佳方法 的全部内容, 来源链接: utcz.com/qa/429714.html