2013-01-10 145 views
0

两个问题:春季安全与JSF

问题1:

我有我的applicaitonContext-security.xml文件中的以下内容:

<security:http auto-config="true" access-denied-page="/denied.jsf" servlet-api-provision="false"> 
    <security:intercept-url pattern="/denied.jsf" filters="none" />  
    <security:intercept-url pattern="/login.jsf" filters="none" /> 
    <security:intercept-url pattern="/redirect.html" filters="none" /> 
    <security:intercept-url pattern="/images/**" filters="none" />  
    <security:intercept-url pattern="/a4j_resource/**" filters="none" />   
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" /> 
    <security:form-login login-page="/login.jsf" authentication-failure-url="/login.jsf" default-target-url="/redirect.html" />  
    <security:logout /> 
</security:http> 

,但是当我去http://localhost:8080/summary/projects.jsf我不t重定向到login.jsf页面。有任何想法吗。

问题2:projects.xhtml的网页我有

<rich:comboBox value="#{projectUiService.coordinatorSelected}" directInputSuggestions="true" defaultLabel="Enter Co-ordinator" > 

getCoordinatorSelected方法我有@RolesAllowed("READ_PROJECT"),但我得到的是错误:

AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext 

我如何让Spring在用户未登录时重定向到登录页面,如果用户没有正确的权限,如何将其重定向到denied.jsf页面?

我已经四处寻找了最后6小时,并试图加载日志,但找不到解决方案。任何指针将不胜感激。

感谢

回答

0

您需要通过单独

<security:http pattern="/denied.jsf" security="none" /> 

标签,以取代所有的

<security:intercept-url pattern="/denied.jsf" filters="none" /> 

结构。一个拦截的URL与过滤器= “无” will deactivate all your http config element

第二个选项:

<security:intercept-url pattern="/denied.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
+0

''不能作为父''标记的子元素。 –

+0

是的。您需要多个顶级标记。 –

+0

解决了!请参阅下面的答案以获得完整的解释。谢谢Maksym。 –

0

解决了! @ [Maksym Demidas]是正确的。继承了使用Spring 2.5中和3的组合整理出所有依赖于春季3和更新的安全XML文件的应用程序:

.... 
<security:http pattern="/denied.jsf" security="none"/> 
<security:http pattern="/login.jsf" security="none"/> 
.... 
<security:http auto-config="true" access-denied-page="/denied.jsf" servlet-api-provision="false"> 
    <security:intercept-url pattern="/login.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" /> 
    <security:form-login login-page="/login.jsf" authentication-failure-url="/login.jsf" default-target-url="/redirect.html" /> 
    <security:logout /> 
</security:http> 

现在一切工作正常。