将HttpServletResponse注入服务层的最佳方法
我知道这可能不是这样一个问题的最佳设计,只是针对特定要求。
当前应用程序需要ServletContext
, HttpServletRequest
, HttpServletResponse
进入服务层以获得customized authentication provider
。
显然没有任何特定的配置或inheritance代码:
@Component("myAuthenticaionProvider") public class MyAuthenticaionProvider implements AuthenticationUserDetailsService { @Autowired private ServletContext context; @Autowired private HttpServletRequest request; @Autowired private HttpServletResponse response; ....... }
必须抛出exception:
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.servlet.http.HttpServletResponse] found for dependency:
我能想到的可能解决方案:
-
使用filter拦截
HttpServletRequest
,但是需要URL模式,否则将拦截我认为可能是性能问题的所有URL? -
在spring-security.xml或application-context.xml中创建一个
request
范围bean,然后注入当前的身份validation提供程序类,使其能够获取HttpServletRequest
。 但是我觉得这里有什么问题,比如如何启动请求范围bean?
那么什么是最好的做法?
除了作为一个“坏主意”之外,请求对象仅与请求一样长。 由于生命周期的不同,您无法将其注入单例。 您可以通过方法参数传递它。
与您的请求匹配的最接近的解决方案是在catch allfilter内创建一个ThreadLocal变量并将其设置在那里并将该filter或委托注入到服务的本地线程中。 我强烈建议你避免这种情况。
您是否尝试在身份validation提供程序中实现HttpRequestHandler接口以及AuthenticationUserDetailsService?
- hoverJava时的图像更改
- 从另一个线程调用@Transactional方法(Runnable)
- 如何学习游戏开发?
- 如何从Locale获取当前时间和时区?
- java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法强制转换为model.User
- 什么时候抛出“java.io.IOException:Connection reset by peer”?
- Java String.replace / replaceAll无法正常工作
- 如何使用hibernate JPA注释映射嵌套集合Map <Key,List >?
- 使用java websocket API和Javascript上传文件