2011-07-11 38 views
4

我想在我的GWT应用程序上使用方法级安全性。我试图使用Spring Security 3.1,因为我发现了一个工作示例here,但它不使用form-login。阅读this answer第一个方法调用成功获得SecurityContext的,但在以后的调用之前将其清除后:春季方法级别安全性在第二次调用时失败

[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - Obtained a valid SecurityContext from SPRING_SECURITY_CONTEXT: '[email protected]e9f089: Authentication: [email protected]e9f089' 
... 
[org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor] - Authorization successful 
... 
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed 
... 
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession. 
[org.springframework.security.web.context.SecurityContextPersistenceFilter] - SecurityContextHolder now cleared, as request processing completed 
... 
[org.springframework.security.web.context.HttpSessionSecurityContextRepository] - HttpSession returned null object for SPRING_SECURITY_CONTEXT 

第二个电话的第一,只是在用户登录后,在连败之后发生

是它因为我跟着其他的答案,并删除<http pattern="/MyAppName/**" security="none" />并添加<intercept-url pattern="/MyAppName/**" access="permitAll()" />

我的过滤器如下所示:

<http pattern="/favicon.ico" security="none" /> 

<http access-decision-manager-ref="accessDecisionManager" use-expressions="true" auto-config="false" entry-point-ref="LoginUrlAuthenticationEntryPoint"> 
    <form-login login-page="/Login.html" always-use-default-target="true" default-target-url="/Main.html?gwt.codesvr=127.0.0.1:9997" /> 
    <intercept-url pattern="/Login.html" access="permitAll()" /> 
    <intercept-url pattern="/Login2.html" access="permitAll()" /> 
    <intercept-url pattern="/MyAppName/**" access="permitAll()" /> 
    <intercept-url pattern="/**" access="isAuthenticated()" /> 
    <logout delete-cookies="JSESSIONID" logout-success-url="/Login.html" /> 
    <remember-me token-validity-seconds="86400" key="key" user-service-ref="userDetailsService" /> 
</http> 

下面我得到我用AspectJ为全局法安全的例子,但不会使用它,如果我能得到那工作:

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" mode="aspectj" proxy-target-class="true" > 
    <expression-handler ref="expressionHandler"/> 
</global-method-security> 

感谢您花时间阅读本文。

请让我知道是否需要更多的细节。

+2

我认为你需要修整更多的东西到可以管理的东西,没有多少人会花费时间阅读和浏览所有的文本,试图找出问题的症结所在。 –

+0

感谢您的评论。我尝试删除3个成功调用中的2个日志,因为它们可能是多余的。 – WhiteKnight

回答

0

此问题已解决。

解决方案的最后部分是删除使SecurityContextHolder为全局的请求。

如果你有同样的问题,可能会发现this后有帮助。

+1

你是怎么真正解决这个问题的?我有同样的问题。我浏览了链接,但没有帮助。 – Tiny

+0

@Tiny在尝试获得两个因子认证工作时,我将SecurityContextHolder设置为全局的,因此删除这个问题对我来说已经解决了问题,但是可能有很多事情导致了这个问题。此外,我没有从卢克那里听说为什么会导致我遇到的问题。 – WhiteKnight

相关问题