【发布时间】:2011-07-19 05:14:34
【问题描述】:
我想知道如何/在哪里可以在预身份验证方案中管理 SecurityContext 的身份验证。
我正在使用 spring security 2.x 在我的项目中实现预认证场景。现在,它可以正常工作了。
用户通过预认证过程登录后,可以被授权相关角色,并能够访问security:filter中定义的资源。
例如
<security:filter-invocation-definition-source lowercase-comparisons="true" path-type="ant">
<security:intercept-url pattern="/resource/**" access="ROLE_ADMIN" />
在某个控制器中,我想检查安全内容中的主体。
public abstract class AbstractUserAuthenticationController extends AbstractController
{
protected boolean isAuthenticated(String userName)
{
Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // where issue come up
但 SecurityContextHolder.getContext().getAuthentication() 总是返回 null。
另外,我也不能在jsp中使用secuiry标签来检查用户是否具有相关角色
<security:authorize ifNotGranted="ROLE_ADMIN">
no role found
</security:authorize>
下面显示了我正在使用的“filterChainProxy”。
<bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/*subscri*=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,securityContextHolderAwareRequestFilter,subscribeExceptionTranslationFilter,filterInvocationInterceptor
/**=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,logoutFilter,rememberMeProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
</value>
</property>
</bean>
<bean id="preAuthenticatedAuthenticationProvider" class="org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService" ref="preAuthenticatedUserDetailsService" />
</bean>
<bean id="preAuthenticatedUserDetailsService" class="demo.project.security.auth.RsaAuthenticationUserDetailsService" >
<property name="userService" ref="userService" />
</bean>
<bean id="j2eePreAuthFilter" class="demo.project.security.filter.AutoLoginFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="userService" ref="userService" />
</bean>
我想我需要在某处将 Authentication 设置为 SecurityContext,但我不知道在哪里/在哪里。
我错过了什么?谁能给我一些线索?
谢谢!
伊恩
【问题讨论】:
标签: spring-security