2014-03-05 159 views
0

我們開發一個需要不同認證的web應用,在我的情況下,這是代理和成員。這就是細節:春季安全多會話3.1

被過濾,但我在這裏有一些問題。首先,我登錄到代理資料頁面併成功登錄。但是,然後打開成員頁面,並且收到了HTTP狀態403 - 訪問被拒絕。我想要實現的情況是既代理和會員能夠登錄。

這裏是我的web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 
<display-name>spring-security-hello-world</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/mvc-dispatcher-servlet.xml, 
     /WEB-INF/spring-security.xml 
    </param-value> 
</context-param> 

<filter> 
    <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> 
</filter-mapping> 

這是我的彈簧security.xml文件

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security.xsd"> 

<!-- <http pattern="/agent/login" security="none" /> --> 

<http pattern="/member/**"> 
    <intercept-url pattern="/**" access="ROLE_MEMBER" /> 
    <form-login login-page="/member_login" default-target-url="/member/profile" 
     authentication-failure-url="/member_loginfailed" /> 
    <logout logout-success-url="/member_logout" /> 
</http> 

<http auto-config="true"> 
    <intercept-url pattern="/agent/**" access="ROLE_AGENT" /> 
    <form-login login-page="/agent_login" default-target-url="/agent/profile" 
     authentication-failure-url="/agent_loginfailed" /> 
    <logout logout-success-url="/agent_logout" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="agent" password="123456" authorities="ROLE_AGENT" /> 
     </user-service> 
    </authentication-provider> 

    <authentication-provider> 
     <user-service> 
      <user name="member" password="123456" authorities="ROLE_MEMBER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

注: 在我的情況下,一個用戶只能有Ø ne作用(僅限代理或成員)

回答

0

如果您在同一瀏覽器中執行此操作,則帶有ROLE_AGENT的代理程序將用於訪問僅限於ROLE_MEMBER的頁面。您可以將ROLE_MEMBER添加到您的access =「ROLE_AGENT,ROLE_MEMBER」以進行檢查。

+0

你好freakman, 謝謝你的回答。 但在我的情況下,一個用戶只能有一個角色,這是一個代理或成員。 你有什麼解決方案嗎?以前感謝。 – rajadaudz

+0

然後嘗試爲/ member/**模式使用access =「hasAnyRole('ROLE_MEMBER','ROLE_AGENT')」,您不會以這種方式更改用戶角色 - 而是允許成員或代理訪問特定的url。當然,如果你認爲代理是一種超級會員,他真的應該有權訪問會員頁面。 – freakman

+0

再次感謝您的答案..但在我的情況下,代理角色沒有權限訪問成員頁面..你能給我另一種解決方案嗎? – rajadaudz