You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Thomas Hermann <th...@mtg.de> on 2014/02/17 14:14:21 UTC
Problems configuring own error pages for status codes manually set
Hello,
I try to use/configure my own error pages for my struts 2 Application
(struts version: 2.3.15.3, Apache Tomcat 6.0).
I configure the two error pages for the status codes 403 (not
authenticted) and 404 (page not avaiable) in the web.xml (see below) and
place the desired pages in the approprate directory of the web-application.
The code 403 will be explicity set by the business logic (check for
authentication) using the sendError method of HttpServletResponse:
protected void handleNotAuthorized(HttpServletRequest request,
HttpServletResponse response )
throws ServletException, IOException
{
/* some Code to check authentication */
if (testAuth){
logger.info("Authorization failed. Show 403 page!");
response.sendError(HttpServletResponse.SC_FORBIDDEN);
}
}
Here a the relevant experpt of my web.xml:
----------------------------------------------------------------------
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
------------------------------------------------
For 404 everything works fine: If I request a non-existing page, my
configured error page will be displayed.
But when I try to request a non-authenticated page (status 403), the
HTTP-Response has the correct status code 403 but my configured error
page will not be displayed. Instead the browser shows a default page
(empty page in case of firefox).
Has anyone an idea, how to solve the problem?
Thanks,
Thomas
Re: Problems configuring own error pages for status codes manually set
Posted by Lukasz Lenart <lu...@apache.org>.
Maybe trying setting struts.handle.exception to false.
2014-02-17 14:58 GMT+01:00 Christoph Nenning <Ch...@lex-com.net>:
> Instead of response.sendError() you can try to use a struts http header
> result:
>
>
> http://struts.apache.org/development/2.x/docs/httpheader-result.html
>
>
> hope that helps
>
>
> Regards,
> Christoph
>
>
>>
>> Hello,
>>
>> I try to use/configure my own error pages for my struts 2 Application
>> (struts version: 2.3.15.3, Apache Tomcat 6.0).
>> I configure the two error pages for the status codes 403 (not
>> authenticted) and 404 (page not avaiable) in the web.xml (see below) and
>
>> place the desired pages in the approprate directory of the
> web-application.
>>
>> The code 403 will be explicity set by the business logic (check for
>> authentication) using the sendError method of HttpServletResponse:
>>
>> protected void handleNotAuthorized(HttpServletRequest request,
>> HttpServletResponse response )
>> throws ServletException, IOException
>> {
>> /* some Code to check authentication */
>> if (testAuth){
>> logger.info("Authorization failed. Show 403 page!");
>> response.sendError(HttpServletResponse.SC_FORBIDDEN);
>> }
>> }
>>
>> Here a the relevant experpt of my web.xml:
>> ----------------------------------------------------------------------
>> <filter>
>> <filter-name>struts-prepare</filter-name>
>> <filter-
>> class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</
>> filter-class>
>>
>> </filter>
>>
>> <filter>
>> <filter-name>sitemesh</filter-name>
>> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</
>> filter-class>
>>
>> </filter>
>>
>> <filter>
>> <filter-name>struts-execute</filter-name>
>> <filter-
>> class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</
>> filter-class>
>>
>> </filter>
>>
>> <filter-mapping>
>> <filter-name>struts-prepare</filter-name>
>> <url-pattern>/*</url-pattern>
>> <dispatcher>REQUEST</dispatcher>
>> <dispatcher>FORWARD</dispatcher>
>> <dispatcher>INCLUDE</dispatcher>
>> <dispatcher>ERROR</dispatcher>
>> </filter-mapping>
>>
>> <filter-mapping>
>> <filter-name>sitemesh</filter-name>
>> <url-pattern>*.html</url-pattern>
>> </filter-mapping>
>>
>> <filter-mapping>
>> <filter-name>struts-execute</filter-name>
>> <url-pattern>/*</url-pattern>
>> <dispatcher>REQUEST</dispatcher>
>> <dispatcher>FORWARD</dispatcher>
>> <dispatcher>INCLUDE</dispatcher>
>> <dispatcher>ERROR</dispatcher>
>> </filter-mapping>
>>
>> <error-page>
>> <error-code>403</error-code>
>> <location>/403.jsp</location>
>> </error-page>
>> <error-page>
>> <error-code>404</error-code>
>> <location>/404.jsp</location>
>> </error-page>
>> ------------------------------------------------
>>
>> For 404 everything works fine: If I request a non-existing page, my
>> configured error page will be displayed.
>>
>> But when I try to request a non-authenticated page (status 403), the
>> HTTP-Response has the correct status code 403 but my configured error
>> page will not be displayed. Instead the browser shows a default page
>> (empty page in case of firefox).
>>
>> Has anyone an idea, how to solve the problem?
>>
>> Thanks,
>> Thomas
>>
>
> This Email was scanned by Sophos Anti Virus
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: Problems configuring own error pages for status codes manually set
Posted by Christoph Nenning <Ch...@lex-com.net>.
Instead of response.sendError() you can try to use a struts http header
result:
http://struts.apache.org/development/2.x/docs/httpheader-result.html
hope that helps
Regards,
Christoph
>
> Hello,
>
> I try to use/configure my own error pages for my struts 2 Application
> (struts version: 2.3.15.3, Apache Tomcat 6.0).
> I configure the two error pages for the status codes 403 (not
> authenticted) and 404 (page not avaiable) in the web.xml (see below) and
> place the desired pages in the approprate directory of the
web-application.
>
> The code 403 will be explicity set by the business logic (check for
> authentication) using the sendError method of HttpServletResponse:
>
> protected void handleNotAuthorized(HttpServletRequest request,
> HttpServletResponse response )
> throws ServletException, IOException
> {
> /* some Code to check authentication */
> if (testAuth){
> logger.info("Authorization failed. Show 403 page!");
> response.sendError(HttpServletResponse.SC_FORBIDDEN);
> }
> }
>
> Here a the relevant experpt of my web.xml:
> ----------------------------------------------------------------------
> <filter>
> <filter-name>struts-prepare</filter-name>
> <filter-
> class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</
> filter-class>
>
> </filter>
>
> <filter>
> <filter-name>sitemesh</filter-name>
> <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</
> filter-class>
>
> </filter>
>
> <filter>
> <filter-name>struts-execute</filter-name>
> <filter-
> class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</
> filter-class>
>
> </filter>
>
> <filter-mapping>
> <filter-name>struts-prepare</filter-name>
> <url-pattern>/*</url-pattern>
> <dispatcher>REQUEST</dispatcher>
> <dispatcher>FORWARD</dispatcher>
> <dispatcher>INCLUDE</dispatcher>
> <dispatcher>ERROR</dispatcher>
> </filter-mapping>
>
> <filter-mapping>
> <filter-name>sitemesh</filter-name>
> <url-pattern>*.html</url-pattern>
> </filter-mapping>
>
> <filter-mapping>
> <filter-name>struts-execute</filter-name>
> <url-pattern>/*</url-pattern>
> <dispatcher>REQUEST</dispatcher>
> <dispatcher>FORWARD</dispatcher>
> <dispatcher>INCLUDE</dispatcher>
> <dispatcher>ERROR</dispatcher>
> </filter-mapping>
>
> <error-page>
> <error-code>403</error-code>
> <location>/403.jsp</location>
> </error-page>
> <error-page>
> <error-code>404</error-code>
> <location>/404.jsp</location>
> </error-page>
> ------------------------------------------------
>
> For 404 everything works fine: If I request a non-existing page, my
> configured error page will be displayed.
>
> But when I try to request a non-authenticated page (status 403), the
> HTTP-Response has the correct status code 403 but my configured error
> page will not be displayed. Instead the browser shows a default page
> (empty page in case of firefox).
>
> Has anyone an idea, how to solve the problem?
>
> Thanks,
> Thomas
>
This Email was scanned by Sophos Anti Virus