spring security集成cas客户端后

wad12302 发布于 2012/07/27 18:44
阅读 1K+
收藏 1

spring security集成cas客户端时候配置了一个

	<authentication-manager alias="authenticationManager">
		<authentication-provider ref="casAuthenticationProvider"/>
	</authentication-manager>

但是这个只能验证用户是否登录的,

现在我需要自定义一个

<custom-filter ref="myAclFilter" before="FILTER_SECURITY_INTERCEPTOR"/>

拦截权限的

	<authentication-manager alias="ssaAuthenticationManager">
		<authentication-provider user-service-ref="userDetailsService"/>
	</authentication-manager>

配置完成后问题出现了。

跟进代码发现使用了这个默认的

org.springframework.security.authentication.dao.DaoAuthenticationProvider

并且

  String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED" : authentication.getName();

应为经过cas登录后用户的ID 是cas 哪里是_cas_stateful_

这样就使得无法通过了。

请问 是否 这几个是否有先后顺序的?

如果只是有cas的那么就不是org.springframework.security.authentication.dao.DaoAuthenticationProvider

而是CasAuthenticationProvider 

请问怎么设置这个顺序

加载中
0
wad12302
wad12302

AbstractUserDetailsAuthenticationProvider中

 String username = (authentication.getPrincipal() == null) ? "NONE_PROVIDED" : authentication.getName();

user = retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication);

且:DaoAuthenticationProvider中

 loadedUser = this.getUserDetailsService().loadUserByUsername(username);

这个username就是:_cas_stateful_

CasAuthenticationProvider中

            final Assertion assertion = this.ticketValidator.validate(authentication.getCredentials().toString(), getServiceUrl(authentication));

            final UserDetails userDetails = loadUserByAssertion(assertion);

    protected UserDetails loadUserByAssertion(final Assertion assertion) {

        final CasAssertionAuthenticationToken token = new CasAssertionAuthenticationToken(assertion, "");

        return this.authenticationUserDetailsService.loadUserDetails(token);

    }

 

UserDetailsByNameServiceWrapper

 

0
wad12302
wad12302

所以最后我的自定义filter:

	<beans:bean id="myAclFilter" class="com.manage.sso.interceptor.AclFilterSecurityInterceptor">
		<beans:property name="authenticationManager" ref="authenticationManager" />
		<beans:property name="accessDecisionManager" ref="myAclAccessDecisionManager" />
		<beans:property name="securityMetadataSource" ref="myAclFilterInvocationSecurityMetadataSource" />
	</beans:bean>

<beans:property name="authenticationManager" ref="authenticationManager" />        
引用cas的同一个manager简单测试过是没有问题的

0
32789mm3600
32789mm3600
有缘,我们的头像差不多哦。
wad12302
wad12302
加菲猫的名言啊!
32789mm3600
32789mm3600
@wad12302 咋扯到爱情上去了呢???
wad12302
wad12302
哈哈! 爱情来得快去得也快,只有猪肉卷才是永恒的
0
ToSun
ToSun
_cas_stateful这个用户是干什么的?我的是spring security 3和cas3.5集成的,登录后,userDetailsService注入了两次username,第一次是我的登录名,第二次是这个_cas_stateful,第二次引发异常了,不知道这个_cas_stateful是怎么注入进去的?
0
wad12302
wad12302
这个是系统定义的
返回顶部
顶部