diff options
| author | Bojan Suzic <bojan.suzic@iaik.tugraz.at> | 2014-04-02 12:03:29 +0200 | 
|---|---|---|
| committer | Bojan Suzic <bojan.suzic@iaik.tugraz.at> | 2014-04-02 12:03:29 +0200 | 
| commit | 4b890232cc2ef904ede71663abb4fb5f3d8be7e8 (patch) | |
| tree | 4421b954168090878a0341ee3eba31d7b3906212 /id/ConfigWebTool/src/main | |
| parent | 758b9760bc018319eec916103e5e73385c2a4c4b (diff) | |
| parent | 07e74546f01f69545b77518e0e651b43a4e04e91 (diff) | |
| download | moa-id-spss-4b890232cc2ef904ede71663abb4fb5f3d8be7e8.tar.gz moa-id-spss-4b890232cc2ef904ede71663abb4fb5f3d8be7e8.tar.bz2 moa-id-spss-4b890232cc2ef904ede71663abb4fb5f3d8be7e8.zip | |
Merge branch 'moa-2.1-Snapshot' of gitlab.iaik.tugraz.at:afitzek/moa-idspss into vidp_2.1_bs
Diffstat (limited to 'id/ConfigWebTool/src/main')
3 files changed, 148 insertions, 3 deletions
| diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/filter/EncodingFilter.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/filter/EncodingFilter.java new file mode 100644 index 000000000..71f9536ae --- /dev/null +++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/filter/EncodingFilter.java @@ -0,0 +1,123 @@ +package at.gv.egovernment.moa.id.configuration.filter; + +import java.io.IOException; +import java.nio.charset.Charset; + +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.log4j.Logger; + +/** + * @author <a href="mailto:thomas.knall@iaik.tugraz.at">Thomas Knall</a> + */ +public class EncodingFilter implements javax.servlet.Filter { + +   private static final String SERVLET_INIT_PARAM_ENCODING = "encoding"; +    +   private static final String SERVLET_INIT_PARAM_SET_REQUEST_ENCODING    = "setRequestEncoding"; +   private static final String SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING  = "forceRequestEncoding"; + +   private static final String SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING   = "setResponseEncoding"; +   private static final String SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING = "forceResponseEncoding"; +    +   private static final boolean DEFAULT_SET_REQUEST_ENCODING_VALUE    = true; +   private static final boolean DEFAULT_FORCE_REQUEST_ENCODING_VALUE  = true; +   private static final boolean DEFAULT_SET_RESPONSE_ENCODING_VALUE   = false; +   private static final boolean DEFAULT_FORCE_RESPONSE_ENCODING_VALUE = false; +    +   private Logger log = Logger.getLogger(getClass().getName()); + +   private String encoding = null; +    +   private boolean setRequestEncoding; +   private boolean forceRequestEncoding; + +   private boolean setResponseEncoding; +   private boolean forceResponseEncoding; +    +   private boolean enabled = false; +    +   private boolean parseBooleanInitParameter(final FilterConfig filterConfig, String parameterName, boolean defaultValue) { +      String paramValue = filterConfig.getInitParameter(parameterName); +      if (paramValue == null) { +         return defaultValue; +      } +      paramValue = paramValue.trim(); +      if (paramValue.equalsIgnoreCase("true")) { +         return true; +      } else if (paramValue.equalsIgnoreCase("false")){ +         return false; +      } else { +         log.warn("Unknown value \"" + paramValue + "\" for init parameter \"" + parameterName + "\" detected. Should be \"true\" or \"false\". Using default value \"" + defaultValue + "\"."); +         return defaultValue; +      } +   } + +   public void init(final FilterConfig filterConfig) throws ServletException { +      log.debug("Initializing encoding filter (" + getClass().getName() + ")."); + +      // mandatory parameter encoding +      String desiredEncoding = filterConfig.getInitParameter(SERVLET_INIT_PARAM_ENCODING); +      if (StringUtils.isEmpty(desiredEncoding)) { +         log.warn("Unable to initialize encoding filter (" + getClass().getName() + "). Init parameter \"" + SERVLET_INIT_PARAM_ENCODING + "\" empty or not supplied."); +      } else if (!Charset.isSupported(desiredEncoding)) { +         log.warn("Unable to initialize encoding filter (" + getClass().getName() + "). Encoding \"" + desiredEncoding + "\" is not supported."); +      } else { +         this.encoding = desiredEncoding; +         this.enabled = true; +         this.setRequestEncoding    = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_SET_REQUEST_ENCODING,    DEFAULT_SET_REQUEST_ENCODING_VALUE); +         this.forceRequestEncoding  = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING,  DEFAULT_FORCE_REQUEST_ENCODING_VALUE); +         this.setResponseEncoding   = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING,   DEFAULT_SET_RESPONSE_ENCODING_VALUE); +         this.forceResponseEncoding = this.parseBooleanInitParameter(filterConfig, SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING, DEFAULT_FORCE_RESPONSE_ENCODING_VALUE); +         log.debug("Encoding filter \"" + getClass().getName() + "\" configured: " + this.toString(true)); +          +      } +   } +    +   public String toString(boolean verbose) { +      if (verbose) { +         return new ToStringBuilder(this) +            .append(SERVLET_INIT_PARAM_ENCODING, this.encoding) +            .append(SERVLET_INIT_PARAM_SET_REQUEST_ENCODING, this.setRequestEncoding) +            .append(SERVLET_INIT_PARAM_FORCE_REQUEST_ENCODING, this.forceRequestEncoding) +            .append(SERVLET_INIT_PARAM_SET_RESPONSE_ENCODING, this.setResponseEncoding) +            .append(SERVLET_INIT_PARAM_FORCE_RESPONSE_ENCODING, this.forceResponseEncoding) +         .toString(); +      } else { +         return super.toString(); +      } +   } + +   public void doFilter(ServletRequest request, ServletResponse response, final FilterChain filterChain) throws IOException, ServletException { +      if (this.enabled) { +         if (this.setRequestEncoding) { +            if (this.forceRequestEncoding) { +               log.trace("Forcing request encoding \"" + this.encoding + "\"."); +               request.setCharacterEncoding(this.encoding); +            } else if (request.getCharacterEncoding() == null) { +               log.trace("Request character encoding not set. Setting to \"" + this.encoding + "\"."); +               request.setCharacterEncoding(this.encoding); +            } +         } +         if (this.setResponseEncoding) { +            if (this.forceResponseEncoding) { +               log.trace("Forcing response encoding \"" + this.encoding + "\"."); +               response.setCharacterEncoding(this.encoding); +            } else if (response.getCharacterEncoding() == null) { +               log.trace("Response character encoding not set. Setting to \"" + this.encoding + "\"."); +               response.setCharacterEncoding(this.encoding); +            } +         } +      } +      filterChain.doFilter(request, response); +   } + +   public void destroy() { +   } +} diff --git a/id/ConfigWebTool/src/main/resources/struts.xml b/id/ConfigWebTool/src/main/resources/struts.xml index 9a098da5a..55490788d 100644 --- a/id/ConfigWebTool/src/main/resources/struts.xml +++ b/id/ConfigWebTool/src/main/resources/struts.xml @@ -6,10 +6,23 @@  <struts>  	<constant name="struts.custom.i18n.resources" value="webpages" />     +  <constant name="struts.mapper.action.prefix.enabled" value="true" /> +  <constant name="struts.mapper.action.prefix.crossNamespaces" value="false" />  	<package name="default" namespace="/" extends="struts-default"> -	    <default-interceptor-ref name="defaultStack"/> +	 +		 + 		<interceptors> +	    	<interceptor-stack name="OwnStack"> +	    	<interceptor-ref name="defaultStack" /> +	  			<interceptor-ref name="params"> +  					<param +						name="excludeParams">^class\..*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^method:.*</param> +				</interceptor-ref>	 +			</interceptor-stack> +	  	</interceptors> +	  	<default-interceptor-ref name="OwnStack"/>   		 <action name="index" method="start" class="at.gv.egovernment.moa.id.configuration.struts.action.IndexAction">  			  <result name="success">/index.jsp</result> @@ -69,7 +82,16 @@  	<package name="secure" namespace="/secure" extends="struts-default"> -	  <default-interceptor-ref name="defaultStack"/> +	   	<interceptors> +	    	<interceptor-stack name="OwnStack"> +	    	<interceptor-ref name="defaultStack" /> +	  			<interceptor-ref name="params"> +  					<param +						name="excludeParams">^class\..*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^method:.*</param> +				</interceptor-ref>	 +			</interceptor-stack> +	  	</interceptors> +	  	<default-interceptor-ref name="OwnStack"/>  	  <action name="index">  	      <result type="redirectAction"> diff --git a/id/ConfigWebTool/src/main/webapp/WEB-INF/web.xml b/id/ConfigWebTool/src/main/webapp/WEB-INF/web.xml index a44cf8ce5..b55e97f23 100644 --- a/id/ConfigWebTool/src/main/webapp/WEB-INF/web.xml +++ b/id/ConfigWebTool/src/main/webapp/WEB-INF/web.xml @@ -46,7 +46,7 @@     <filter>  		<filter-name>EncodingFilter</filter-name> -		<filter-class>at.iaik.commons.webapp.filter.encoding.EncodingFilter</filter-class> +		<filter-class>at.gv.egovernment.moa.id.configuration.filter.EncodingFilter</filter-class>  		<init-param>  			<param-name>encoding</param-name>  			<param-value>UTF-8</param-value> | 
