8000 GitHub - pedroaoguimaraes/wso2-tomcat-fliter: Tomcat filter to add additional attributes as Thread Local variables.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

pedroaoguimaraes/wso2-tomcat-fliter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

wso2-tomcat-fliter

Tomcat filter to add additional attributes as Thread Local variables.

Purpose

To preserve defined set of HTTP headers of a SCIM request in a thread local variable, so that those information are available in the User Store manger level. And to set response attributes to a thread local in the User Store Manager level, so that those additional response values can be injected in to the outgoing HTTP request's headers.

Instructions

  1. Build and place the jar inside the <IS_HOME>/repository/components/lib directory.
  2. Register the new filter in the <IS_HOME>/repository/deployment/server/webapps/scim2/WEB-INF/web.xml as below.
<web-app>
...
    <filter>
        <filter-name>SCIM2-additional-attribute-filter</filter-name>
        <filter-class>com.wso2.sample.filter.SCIM2AdditionalAttributeAppenderFilter</filter-class>
        <init-param>
            <param-name>reqHeadersList</param-name>
            <param-value>header1, header2, header3</param-value>
        </init-param>
        <init-param>
             <param-name>resHeadersList</param-name>
             <param-value>res-header1, res-header2, res-header3</param-value>
        </init-param>
        <init-param>
             <param-name>HTTPMethods</param-name>
             <param-value>DELETE</param-value>
        </init-param>
     </filter>
     <filter-mapping>
        <filter-name>SCIM2-additional-attribute-filter</filter-name>
        <url-pattern>/Users/*</url-pattern>
    </filter-mapping>
    ...
</web-app>
  1. In the reqHeadersList param, you can define all the headers(comma separated) that should be preserved to an ThreadLocal.
  2. In the resHeadersList param , you can define all the headers that should be populated in the out going response.
  3. In the url-pattern param, define the resource path you want thi filter to be engaged.
  4. HTTPMethods value can be a comma separated HTTP methods where you want this filter to be engaged. The ThreadLocal response object should have the same keys as defined in the resHeadersList list.
  5. Your responsibility is to populate a thread local object from your Custom User Store manager with the key names defined in the resHeadersList. So that, this filter can extract them from the ThreadLocal in the response flow and set as HTTP headers in the outgoing response. Sample implementation for User store side logic would be as follows.
import com.wso2.sample.filter.SCIM2AdditionalAttributeAppenderFilter;

public class ReadWriteLDAPUserStoreManager extends ReadOnlyLDAPUserStoreManager {

    @Override
    public void doDeleteUser(String userName) throws UserStoreException {

        Map<String, String> additionalAttributes = SCIM2AdditionalAttributeAppenderFilter.getUserThreadLocal();
        for (String key : additionalAttributes.keySet()) {
            log.info(key + " : "  + additionalAttributes.get(key));
        }

        additionalAttributes.clear();
        additionalAttributes.put("res-header1", "response value 1");
        additionalAttributes.put("res-header2", "response value 2");
        SCIM2AdditionalAttributeAppenderFilter.setUserThreadLocal(additionalAttributes);
        ...

P.S.

As the Tomcat filter's response is already committed, response were not reflected in the out going HTTP response. Hence the additional utils. You can refer to below link for more details on that. So : https://stackoverflow.com/questions/11025605/response-is-committing-and-dofilter-chain-is-broken

About

Tomcat filter to add additional attributes as Thread Local variables.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%
0