> On Aug. 24, 2018, 3:02 p.m., Madhan Neethiraj wrote:
> > I would expect the decoding to be handled by default (by the container?).
> > This filter might end up decoding again, which might result in incorrect
> > result. Please verify this with few usecases, like queryParamName or
> > paramValue having some encoded character.
I have tried following approaches but it did'nt worked
* I have set System propety
(System.setProperty("org.eclipse.jetty.util.UrlEncoding.charset", "utf-8"))
* I have added config in web.xml but this also did'nt worked
<locale-encoding-mapping>
<locale>en</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
* Then I tried request.setCharacterEncoding("UTF-8");
> On Aug. 24, 2018, 3:02 p.m., Madhan Neethiraj wrote:
> > webapp/src/main/java/org/apache/atlas/web/filters/AtlasDecoderFilter.java
> > Lines 44 (patched)
> > <https://reviews.apache.org/r/68501/diff/1/?file=2077092#file2077092line44>
> >
> > Given 'configuration' is needed only to initialize 'isDECODING_ENABLED'
> > and 'isDECODING_ENABLED' is not needed in static context, please avoid
> > 'static' and update as below:
> >
> > public class AtlasDecoderFilter implements Filter {
> > private static final Logger LOG =
> > LoggerFactory.getLogger(AtlasDecoderFilter.class);
> >
> > private static final String DECODING = "UTF-8";
> >
> > private final isUriParamsDecodingEnabled;
> >
> >
> > public AtlasDecoderFilter() {
> > Configuration configuration = null;
> >
> > try {
> > configuration = ApplicationProperties.get();
> > } catch (AtlasException excp) {
> > LOG.error("Failed to get ApplicationProperties", e);
> > }
> >
> > isUriParamsDecodingEnabled = configuration != null
> > configuration.getBoolean("atlas.rest-decoding.enabled", true); : true?
> > }
> > }
I have removed configuration from AtlasDecoderFilter and condition is added in
AtlasSecurityConfig so that filter dont get called at all when flag is false.
> On Aug. 24, 2018, 3:02 p.m., Madhan Neethiraj wrote:
> > webapp/src/main/java/org/apache/atlas/web/filters/AtlasDecoderFilter.java
> > Lines 120 (patched)
> > <https://reviews.apache.org/r/68501/diff/1/?file=2077092#file2077092line120>
> >
> > requestURI or requestQueryParam could be null here - see line #87, #98
> > above. Consider the following alternative impl:
> >
> > public void doFilter(ServletRequest request, ServletResponse response,
> > FilterChain chain) throws IOException, ServletException {
> > boolean isUriDecoded = false;
> >
> > if (isUriDecodingEnabled) {
> > HttpServletRequest httpServletRequest = (HttpServletRequest)
> > request;
> > String requestURI =
> > httpServletRequest.getRequestURI();
> > String requestQueryParam =
> > httpServletRequest.getQueryString();
> >
> > if (requestURI != null) {
> > try {
> > String decodedURI = URLDecoder.decode(requestURI, DECODING);
> >
> > if (!requestURI.equals(decodedURI)) {
> > isUriDecoded = true;
> > requestURI = decodedURI;
> > }
> > } catch (UnsupportedEncodingException excp) {
> > LOG.warn("URI decoding failed", excp);
> > }
> > }
> >
> > if (requestQueryParam != null) {
> > try {
> > String decodedQueryParam = URLDecoder.decode(requestQueryParam,
> > DECODING);
> >
> > if (!requestQueryParam.equals(decodedQueryParam)) {
> > isUriDecoded = true;
> > requestQueryParam = decodedQueryParam;
> > }
> > } catch (UnsupportedEncodingException excp) {
> > LOG.warn("URI decoding failed", excp);
> > }
> > }
> > }
> >
> > if (isUriDecoded) {
> > final String dispatchUri;
> >
> > if (requestURI == null) {
> > dispatchUri = requestQueryParam;
> > } else if (requestQueryParam == null) {
> > dispatchUri = requestURI;
> > } else {
> > dispatchUri = requestURI.concat(requestQueryParam);
> > }
> >
> > request.getRequestDispatcher(dispatchUri).forward(request,
> > response);
> > } else {
> > chain.doFilter(request, response);
> > }
> > }
Removed requestURI check as it is not needed because if requestURI is encoded
then AtlasDecoderFilter will not called and spring is redirecting to the
error.jsp.
- keval
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/68501/#review207884
-----------------------------------------------------------
On Aug. 28, 2018, 2:14 p.m., keval bhatt wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/68501/
> -----------------------------------------------------------
>
> (Updated Aug. 28, 2018, 2:14 p.m.)
>
>
> Review request for atlas, Apoorv Naik, Ashutosh Mestry, Madhan Neethiraj,
> Nixon Rodrigues, and Sarath Subramanian.
>
>
> Bugs: ATLAS-2837
> https://issues.apache.org/jira/browse/ATLAS-2837
>
>
> Repository: atlas
>
>
> Description
> -------
>
> When we are trying to access
> [http://localhost:21000/api/atlas/entities?type%3Dhive_table] then it shows
> error.
>
> ```
> {
> error: "Entity type cannot be null",
> stackTrace: "java.lang.NullPointerException: Entity type cannot be null at
> com.google.common.base.Preconditions.checkNotNull(Preconditions.java:208) at
> org.apache.atlas.web.resources.EntityResource.getEntityListByType(EntityResource.java:509)
> at
> org.apache.atlas.web.resources.EntityResource.getEntity(EntityResource.java:547)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498) at
> com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
> at
> com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
> at
> com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatc
her.java:75) at
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
at
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
at
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
at
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
at
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
at com.su
n.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at
com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182)
at
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
at org.apache.atlas.web.filters.AuditFilter.doFilter(AuditFilter.java:71) at
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133) at
com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130) at com.google
.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203) at
com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130) at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at
org.apache.atlas.web.filters.AtlasAuthorizationFilter.doFilter(AtlasAuthorizationFilter.java:154)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFi
lter.java:113) at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.apache.atlas.web.filters.AtlasCSRFPreventionFilter$ServletFilterHttpInteraction.proceed(AtlasCSRFPreventionFilter.java:232)
at
org.apache.atlas.web.filters.AtlasCSRFPreventionFilter.handleHttpInteraction(AtlasCSRFPreventionFilter.java:177)
at
org.apache.atlas.web.filters.AtlasCSRFPreventionFilter.doFilter(AtlasCSRFPreventionFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterC
hain.doFilter(FilterChainProxy.java:342) at
org.apache.atlas.web.filters.AtlasAuthenticationFilter.doFilter(AtlasAuthenticationFilter.java:305)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web
.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.Delega
tingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Ser
ver.handle(Server.java:499) at
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745) "
> }
> ```
>
>
> Diffs
> -----
>
> webapp/src/main/java/org/apache/atlas/web/filters/AtlasDecoderFilter.java
> PRE-CREATION
> webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java 82d6f3594
> webapp/src/main/java/org/apache/atlas/web/security/AtlasSecurityConfig.java
> 64c95203c
>
>
> Diff: https://reviews.apache.org/r/68501/diff/2/
>
>
> Testing
> -------
>
> API test case worked properly
> https://builds.apache.org/job/PreCommit-ATLAS-Build-Test/606/consoleFull
>
>
> Thanks,
>
> keval bhatt
>
>