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