Skip to content

Commit

Permalink
Pass origin into CorsFilter constructor instead of via init
Browse files Browse the repository at this point in the history
  • Loading branch information
technige authored and ali-ince committed Apr 25, 2018
1 parent ab973ef commit 5a8980d
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 34 deletions.
Expand Up @@ -64,7 +64,7 @@ public void start()
authorizationFilter = createAuthorizationDisabledFilter(); authorizationFilter = createAuthorizationDisabledFilter();
} }


webServer.addFilter( authorizationFilter, "/*", Collections.emptyMap() ); webServer.addFilter( authorizationFilter, "/*" );
} }


@Override @Override
Expand Down
Expand Up @@ -71,9 +71,8 @@ public void start()
{ {
URI restApiUri = restApiUri( ); URI restApiUri = restApiUri( );


webServer.addFilter( new CollectUserAgentFilter( clientNames() ), "/*", Collections.emptyMap() ); webServer.addFilter( new CollectUserAgentFilter( clientNames() ), "/*" );
webServer.addFilter( new CorsFilter( logProvider ), "/*", Collections.singletonMap( webServer.addFilter( new CorsFilter( logProvider, config.get( access_control_allow_origin ) ), "/*" );
"access_control_allow_origin", config.get( access_control_allow_origin ) ) );
webServer.addJAXRSClasses( getClassNames(), restApiUri.toString(), null ); webServer.addJAXRSClasses( getClassNames(), restApiUri.toString(), null );
loadPlugins(); loadPlugins();
} }
Expand Down
Expand Up @@ -54,7 +54,7 @@ public void start()
{ {
mountedFilter = new SecurityFilter( securityRules ); mountedFilter = new SecurityFilter( securityRules );


webServer.addFilter( mountedFilter, "/*", Collections.emptyMap() ); webServer.addFilter( mountedFilter, "/*" );


for ( SecurityRule rule : securityRules ) for ( SecurityRule rule : securityRules )
{ {
Expand Down
Expand Up @@ -51,18 +51,32 @@ public class CorsFilter implements Filter
public static final String VARY = "Vary"; public static final String VARY = "Vary";


private final Log log; private final Log log;
private final String access_control_allow_origin;
private final String vary;


private FilterConfig filterConfig; public CorsFilter( LogProvider logProvider, String access_control_allow_origin )

public CorsFilter( LogProvider logProvider )
{ {
this.log = logProvider.getLog( getClass() ); this.log = logProvider.getLog( getClass() );
this.access_control_allow_origin = access_control_allow_origin;
if ( "*".equals( access_control_allow_origin ) )
{
vary = null;
}
else
{
// If the server specifies an origin host rather than "*", then it must also include Origin in
// the Vary response header to indicate to clients that server responses will differ based on
// the value of the Origin request header.
//
// -- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
//
vary = "Origin";
}
} }


@Override @Override
public void init( FilterConfig filterConfig ) throws ServletException public void init( FilterConfig filterConfig ) throws ServletException
{ {
this.filterConfig = filterConfig;
} }


@Override @Override
Expand All @@ -72,21 +86,10 @@ public void doFilter( ServletRequest servletRequest, ServletResponse servletResp
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletResponse response = (HttpServletResponse) servletResponse;


String uri = "*"; response.setHeader( ACCESS_CONTROL_ALLOW_ORIGIN, access_control_allow_origin );
if ( filterConfig != null ) if ( vary != null )
{ {
uri = filterConfig.getInitParameter( "access_control_allow_origin" ); response.setHeader( VARY, vary );
}
response.setHeader( ACCESS_CONTROL_ALLOW_ORIGIN, uri );
if ( !"*".equals( uri ) )
{
// If the server specifies an origin host rather than "*", then it must also include Origin in
// the Vary response header to indicate to clients that server responses will differ based on
// the value of the Origin request header.
//
// -- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
//
response.setHeader( VARY, "Origin" );
} }


Enumeration<String> requestMethodEnumeration = request.getHeaders( ACCESS_CONTROL_REQUEST_METHOD ); Enumeration<String> requestMethodEnumeration = request.getHeaders( ACCESS_CONTROL_REQUEST_METHOD );
Expand Down Expand Up @@ -115,7 +118,6 @@ public void doFilter( ServletRequest servletRequest, ServletResponse servletResp
@Override @Override
public void destroy() public void destroy()
{ {
this.filterConfig = null;
} }


private void addAllowedMethodIfValid( String methodName, HttpServletResponse response ) private void addAllowedMethodIfValid( String methodName, HttpServletResponse response )
Expand Down
Expand Up @@ -260,9 +260,9 @@ public void removeJAXRSClasses( List<String> classNames, String serverMountPoint
} }


@Override @Override
public void addFilter( Filter filter, String pathSpec, Map<String, String> initParameters ) public void addFilter( Filter filter, String pathSpec )
{ {
filters.add( new FilterDefinition( filter, pathSpec, initParameters ) ); filters.add( new FilterDefinition( filter, pathSpec ) );
} }


@Override @Override
Expand Down Expand Up @@ -511,9 +511,9 @@ private void addFiltersTo( ServletContextHandler context )
{ {
for ( FilterDefinition filterDef : filters ) for ( FilterDefinition filterDef : filters )
{ {
FilterHolder filterHolder = new FilterHolder( filterDef.getFilter() ); context.addFilter( new FilterHolder( filterDef.getFilter() ),
filterHolder.setInitParameters( filterDef.initParameters ); filterDef.getPathSpec(), EnumSet.allOf( DispatcherType.class )
context.addFilter( filterHolder, filterDef.getPathSpec(), EnumSet.allOf( DispatcherType.class ) ); );
} }
} }


Expand All @@ -526,13 +526,11 @@ private static class FilterDefinition
{ {
private final Filter filter; private final Filter filter;
private final String pathSpec; private final String pathSpec;
private final Map<String, String> initParameters;


FilterDefinition( Filter filter, String pathSpec, Map<String, String> initParameters ) FilterDefinition( Filter filter, String pathSpec )
{ {
this.filter = filter; this.filter = filter;
this.pathSpec = pathSpec; this.pathSpec = pathSpec;
this.initParameters = initParameters;
} }


public boolean matches( Filter filter, String pathSpec ) public boolean matches( Filter filter, String pathSpec )
Expand Down
Expand Up @@ -61,7 +61,7 @@ public interface WebServer
void addJAXRSClasses( List<String> classNames, String serverMountPoint, Collection<Injectable<?>> injectables ); void addJAXRSClasses( List<String> classNames, String serverMountPoint, Collection<Injectable<?>> injectables );
void removeJAXRSClasses( List<String> classNames, String serverMountPoint ); void removeJAXRSClasses( List<String> classNames, String serverMountPoint );


void addFilter( Filter filter, String pathSpec, Map<String, String> initParameters ); void addFilter( Filter filter, String pathSpec );


void removeFilter( Filter filter, String pathSpec ); void removeFilter( Filter filter, String pathSpec );


Expand Down
Expand Up @@ -49,7 +49,7 @@ public class CorsFilterTest
private final HttpServletResponse response = responseMock(); private final HttpServletResponse response = responseMock();
private final FilterChain chain = filterChainMock(); private final FilterChain chain = filterChainMock();


private final CorsFilter filter = new CorsFilter( NullLogProvider.getInstance() ); private final CorsFilter filter = new CorsFilter( NullLogProvider.getInstance(), "*" );


@Test @Test
public void shouldCallChainDoFilter() throws Exception public void shouldCallChainDoFilter() throws Exception
Expand Down

0 comments on commit 5a8980d

Please sign in to comment.