Servlet 2.4+ API允許我們使用<filter-mapping>
標記中的<dispatcher>
標記,其中FORWARD
等值可攔截內部轉發給其他資源的請求。對於一個servlet轉發到另一個servlet,彈簧安全限制工作正常。JSF - Spring Security Integration問題
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
問題: 安全過濾器似乎不與JSF操作攔截內部向前
JSF似乎「前進」的請求發送到目標視圖(頁),同時使用JSF行動(導航案例)。這會導致URL在頁面的實際URL後面一步。
這樣做的副作用是彈簧安全性約束(與URL關聯)直到下一個操作纔會生效。
例子: 當前頁面的URL:http://host/myapp/page1.xhtml (page1.xhtml具有導航到第二頁是受保護的動作)
在提交時,該請求被提交給這使得服務器page2.xhtml但該網址仍然爲http://host/myapp/page1.xhtml。 Spring Security沒有攔截和保護page2.xhtml
這可以通過指定以下來克服:
<navigation-case>
<from-outcome>page2</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect/> <!--REDIRECT, INSTEAD OF FORWARD-->
</navigation-case>
重定向是不是我們想要實現這一目標的方式。有沒有更好的方式讓Spring Security與JSF一起工作?
編輯:(彈簧配置XML培訓相關片段)
<http use-expressions="true" once-per-request="false">
<intercept-url pattern="/index.xhtml" access="permitAll" />
<intercept-url pattern="/page1.xhtml" access="isAuthenticated()" />
<intercept-url pattern="/page2.xhtml" access="hasRole('supervisor')" />
<intercept-url pattern="/page3.xhtml" access="hasRole('teller')" />
<form-login login-page="/login.html" default-target-url="/page1.xhtml"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="rod" password="rod" authorities="supervisor, user" />
<user name="dianne" password="dianne" authorities="teller, user" />
<user name="scott" password="scott" authorities="supervisor" />
<user name="peter" password="peter" authorities="user" />
</user-service>
</authentication-provider>
</authentication-manager>
你能不能也發表您的applicationContext.xml – Ravi 2012-02-07 15:48:08
@Ravi編輯的問題與來自appcontext.xml的內容任何想法? – 2012-02-08 04:45:43