Hi,

as I understand you use a commandButton and as a result a different page (a secured one) is rendered but spring security does not seem to intercept the url, is that right?

If so and if the solution used by you uses Facelets then this may be the problem. When using Facelets as opposed to "pure" (older) jsf+jsp approach there is no forward when a new view is rendered that is a result of a navigation case forward. I've been investigating this recently. When JSP view handler is used it checks which view should be rendered next and does a forward to this new view which spring security can intercept. The Facelet view handler however seems to load the view (xhtml) and render it without making the actual forward. As a result no interception can happen and usually it is triggered with the next request. You need to either use redirects or make GET requests to logically separate views - I know this is not natural with jsf versions prior to 2.0, but this new spec seems to change everything :-) - use can easily generate GET requests with the new version.

Hope this helps ;)

Regards,
Tom Pasierb

Madhav Bhargava pisze:
Hi All,

I am using myfaces 1.1, icefaces 1.8.1, spring 2.5.6, spring security -2.0.5, 
WAS 6.0 (app server)

I have configured spring security for my JSF application along with SiteMinder 
as an external authentication mechanism. It works fine till a forward happens 
from within myfaces.

Here is my spring servlet filter chain declaration:
<filter>
                <description>
                                Spring delegating filter which will initiate 
the spring
                                security filter chain
                </description>
                <display-name>springSecurityFilterChain</display-name>
                <filter-name>springSecurityFilterChain</filter-name>
                <filter-class>
                                
org.springframework.web.filter.DelegatingFilterProxy
                </filter-class>
</filter>

<filter-mapping>
                <filter-name>springSecurityFilterChain</filter-name>
                <url-pattern>/*</url-pattern>
                <dispatcher>FORWARD</dispatcher>
                <dispatcher>REQUEST</dispatcher>
</filter-mapping>

And in my spring application context I have followed the advice from spring 
forums and done necessary settings:
Excerpt is:

<security:http
                entry-point-ref="preAuthenticatedProcessingFilterEntryPoint" 
once-per-request="false">
                <security:intercept-url pattern="/index.jsp" filters="none" />
                <security:intercept-url pattern="/login.jsp" filters="none" />
                <security:intercept-url pattern="/authenticationservlet" 
filters="none"/>
                <security:intercept-url pattern="**/jsp/common/**" 
filters="none"/>
                <security:intercept-url pattern="/**/css/**" filters="none"/>
                <security:intercept-url pattern="/**/*.js" filters="none"/>
                <security:intercept-url pattern="/images/**" filters="none"/>
                <security:intercept-url pattern="/**/secure/**" access="ROLE_USER" 
/>
                <security:intercept-url pattern="/**/operations/**" 
access="ROLE_OPERATIONS"/>
                <security:intercept-url pattern="/**" 
access="IS_AUTHENTICATED_ANONYMOUSLY" />
</security:http>

Now when I forward a request from index.jsp to login.jsp then the spring 
filters are called with the login.jsp URL even though the browser shows the old 
URL.

However when from within an action method a navigation case is handled then it is not 
intercepted by the spring filters at all. However if I give a <redirect/> then 
it is properly intercepted with the correct URL as expected.

What can be the reason?

Regards,
Madhav

Reply via email to