2012-02-15 56 views
1

我使用spring security來組織我的GWT應用程序中的安全和用戶管理。如果我以「admin」,註銷和登錄身份作爲另一個用戶,「SecurityContextHolder.getContext()」仍然會返回我「管理員」身份驗證,儘管我使用標準的Spring安全註銷URL(/ j_spring_security_logout),並且註銷後必須登錄再次訪問該頁面...有人有提示?我在我的知識結束= /在我的web.xmlSpring Security Web App:不同的登錄名,相同的認證對象

過濾器:

<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> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

的applicationContext.xml:

<bean class="service.security.DefaultPermissionEvaluator" id="permissionEvaluator"/> 
<bean class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler" id="expressionHandler"> 
    <property name="permissionEvaluator" ref="permissionEvaluator"/> 
</bean> 
<sec:global-method-security pre-post-annotations="enabled"> 
    <sec:expression-handler ref="expressionHandler"/> 
</sec:global-method-security> 
<bean class="service.security.DefaultAuthenticationProvider" id="authenticationProvider"/> 
<bean class="service.security.DefaultUserDetailsManager" id="userDetailsManager"/> 
<bean class="service.security.DefaultAuthenticationListener" id="customAuthListener"/> 
<sec:authentication-manager> 
    <sec:authentication-provider ref="authenticationProvider"> 
    </sec:authentication-provider> 
</sec:authentication-manager>  
<sec:http auto-config="true" use-expressions="true"> 
    <sec:form-login default-target-url="/Index.html" always-use-default-target="true"/> 
    <sec:logout invalidate-session="true" logout-success-url="/" logout-url="/j_spring_security_logout"/> 
    <sec:intercept-url pattern="/service/admin/**" access="hasRole('ADMIN')"/> 
    <sec:intercept-url pattern="/**" access="hasRole('USER')"/> 
</sec:http> 
+0

我使用的碼頭作爲web服務器改變SecurityContext的初始化一次。(MVN GWT:奔跑) – TekTimmy 2012-02-15 15:36:12

回答

2

這個問題是我這樣做:

class ServiceExample extends HttpServlet { 
    private final Authentication auth; 
    public ServiceExample() { 
     this.auth = SecurityContextHolder.getContext().getAuthentication() 
    } 

    public User getCurrentUser() { 
     return (User) this.auth.getPrincipal(); 
    } 
} 

而不是:

class ServiceExample extends HttpServlet { 
    public ServiceExample() { 
    } 

    public User getCurrentUser() { 
     return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    } 
} 

這使得當有人登錄(碼頭行爲),而不是當使用相同的實例碼頭的事業別人的日誌...