Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Component
- @Scope(value = "request")
- public class ApplicationConfig
- {
- private String userCode;
- public String getUserCode()
- {
- return this.userCode;
- }
- public void setUserCode(String userCode)
- {
- this.userCode = userCode;
- }
- }
- @Component
- public class ApplicationConfigManager
- {
- @Autowired
- public ApplicationConfig applicationConfig;
- public ApplicationConfig getApplicationConfig()
- {
- return this.applicationConfig;
- }
- }
- @Component
- @Provider
- public class ApplicationConfigFilter implements ResourceFilter, ContainerRequestFilter
- {
- @Autowired
- private ApplicationConfigManager applicationConfigManager;
- @Override
- public ContainerRequest filter(ContainerRequest request)
- {
- this.applicationConfigManager.getApplicationConfig().setUserCode(
- request.getSecurityContext().getUserPrincipal().getName()
- );
- return request;
- }
- @Override
- public ContainerRequestFilter getRequestFilter()
- {
- return this;
- }
- @Override
- public ContainerResponseFilter getResponseFilter()
- {
- return null;
- }
- }
- @Component
- @Provider
- public class ResourceFilterFactory extends RolesAllowedResourceFilterFactory
- {
- @Autowired
- private ApplicationConfigFilter applicationConfigFilter;
- @Override
- public List<ResourceFilter> create(AbstractMethod am)
- {
- // get filters from RolesAllowedResourceFilterFactory Factory!
- List<ResourceFilter> rolesFilters = super.create(am);
- if (null == rolesFilters) {
- rolesFilters = new ArrayList<ResourceFilter>();
- }
- // Convert into mutable List, so as to add more filters that we need
- // (RolesAllowedResourceFilterFactory generates immutable list of filters)
- List<ResourceFilter> filters = new ArrayList<ResourceFilter>(rolesFilters);
- filters.add(this.applicationConfigFilter);
- return filters;
- }
- }
- <servlet>
- <servlet-name>Jersey REST Service</servlet-name>
- <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.packages</param-name>
- <param-value>com.mypackage</param-value>
- </init-param>
- <init-param>
- <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
- <param-value>com.mypackage.ResourceFilterFactory</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <listener>
- <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
- </listener>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context:annotation-config/>
- <context:component-scan base-package="com.mypackage" />
- <bean id="applicationConfig" class="com.mypackage.ApplicationConfig" scope="request"/>
- .
- .
- Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually o
- perating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
- at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) ~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
- at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:40) ~[spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:328) ~[spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
- ... 57 common frames omitted
- @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
Add Comment
Please, Sign In to add comment