我想知道如何/在哪里可以在预认证场景中管理SecurityContext上的身份验证。
我正在使用spring security 2.x在我的项目中实现pre-verntation Scenario。现在,它很有用。
用户通过预先验证过程登录后,可以使用相关角色进行身份验证,并且能够获得安全性中定义的资源:filter。
e.g。
<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,但我不知道在哪里/哪里。
我缺少什么?任何人都可以提供一些线索吗?
谢谢!
伊恩
答案 0 :(得分:0)
您应该使用SecurityContextHolder.setContext
方法存储SecurityContext
,然后才能将其恢复。
执行此操作的最简单方法是SecurityContextHolder.setContext(new SecurityContextImpl())
。