`
izuoyan
  • 浏览: 9219301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

acegi 作为 yale cas认证服务器的客户端在springside项目中的应用

阅读更多

First, Set SpringSide's web.xml, we use Acegi CAS Filter:

< filter-mapping >
< filter-name > hibernateFilter </ filter-name >
< url-pattern > /j_acegi_cas_security_check </ url-pattern >
</ filter-mapping >

We Should Set Main ACEGI application Context:
1) filterChainProxy should add a cas filter as Acegi's Sample, but here, we reuse
authenticationProcessingFilter, which we act as cas client filter.

< bean id ="filterChainProxy"
class
="org.acegisecurity.util.FilterChainProxy" >
< property name ="filterInvocationDefinitionSource" >
< value >
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,anonymousProcessingFilter,authenticationProcessingFilter,rememberMeProcessingFilter,logoutFilter,channelProcessingFilter,basicProcessingFilter,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,filterInvocationInterceptor
</ value >
</ property >
</ bean >


2) authenticationProcessingFilter, of course, play the most important role in this
applicationContext_acegi.xml.
In SpringSide, /admin is protected resource, so defaultTargetUrl protected it
andall those request to the target url must be authenticated by authenticationManager.

<beanid="authenticationProcessingFilter"class="org.acegisecurity.ui.cas.CasProcessingFilter">
<propertyname="authenticationManager"ref="authenticationManager"/>
<propertyname="authenticationFailureUrl">
<value>/security/login.jsp?login_error=1</value>
</property>
<propertyname="defaultTargetUrl">
<value>/admin/</value>
</property>
<propertyname="filterProcessesUrl">
<value>/j_acegi_cas_security_check</value>
</property>
<propertyname="rememberMeServices"ref="rememberMeServices"/>
<propertyname="exceptionMappings">
<value>
org.acegisecurity.userdetails.UsernameNotFoundException=/security/login.jsp?login_error=user_not_found_error
org.acegisecurity.BadCredentialsException=/security/login.jsp?login_error=user_psw_error
org.acegisecurity.concurrent.ConcurrentLoginException=/security/login.jsp?login_error=too_many_user_error
</value>
</property>
</bean>



3) Then, we set all the needed beans in CAS Filter

<!--=========AcegiasaCASClient的配置=============-->
<beanid="exceptionTranslationFilter"class="org.acegisecurity.ui.ExceptionTranslationFilter">
<propertyname="authenticationEntryPoint">
<reflocal="casProcessingFilterEntryPoint"/>
</property>
</bean>

<!--casconfig-->
<beanid="casProcessingFilterEntryPoint"class="org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint">
<propertyname="loginUrl"><value>https://sourcesite:8443/cas/login</value></property>
<propertyname="serviceProperties"><reflocal="serviceProperties"/></property>
</bean>

<beanid="authenticationManager"class="org.acegisecurity.providers.ProviderManager">
<propertyname="providers">
<list>
<reflocal="casAuthenticationProvider"/>
</list>
</property>
</bean>

<beanid="casAuthenticationProvider"class="org.acegisecurity.providers.cas.CasAuthenticationProvider">
<propertyname="casAuthoritiesPopulator"><refbean="casAuthoritiesPopulator"/></property>
<propertyname="casProxyDecider"><reflocal="casProxyDecider"/></property>
<propertyname="ticketValidator"><reflocal="casProxyTicketValidator"/></property>
<propertyname="statelessTicketCache"><reflocal="statelessTicketCache"/></property>
<propertyname="key"><value>my_password_for_this_auth_provider_only</value></property>
</bean>
<beanid="casProxyTicketValidator"class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator">
<propertyname="casValidate"><value>https://sourcesite:8443/cas/proxyValidate</value></property>
<propertyname="serviceProperties"><reflocal="serviceProperties"/></property>
</bean>
<!--
<beanid="casProxyDecider"class="org.acegisecurity.providers.cas.proxy.AcceptAnyCasProxy"/>
-->
<beanid="casProxyDecider"class="org.acegisecurity.providers.cas.proxy.RejectProxyTickets"/>

<beanid="serviceProperties"class="org.acegisecurity.ui.cas.ServiceProperties">
<propertyname="service">
<value>http://gzug:8080/springside/j_acegi_cas_security_check</value>
</property>
<propertyname="sendRenew">
<value>false</value>
</property>
</bean>

<beanid="statelessTicketCache"class="org.acegisecurity.providers.cas.cache.EhCacheBasedTicketCache">
<propertyname="cache">
<beanclass="org.springframework.cache.ehcache.EhCacheFactoryBean">
<propertyname="cacheManager">
<beanclass="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</property>
<propertyname="cacheName"value="userCache"/>
</bean>
</property>
</bean>

<beanid="casAuthoritiesPopulator"class="org.acegisecurity.providers.cas.populator.DaoCasAuthoritiesPopulator">
<propertyname="userDetailsService"><reflocal="jdbcDaoImpl"/></property>
</bean>

<beanid="casProcessingFilter"class="org.acegisecurity.ui.cas.CasProcessingFilter">
<propertyname="authenticationManager"><reflocal="authenticationManager"/></property>
<propertyname="authenticationFailureUrl"><value>/casfailed.jsp</value></property>
<propertyname="defaultTargetUrl"><value>/</value></property>
<propertyname="filterProcessesUrl"><value>/j_acegi_cas_security_check</value></property>
</bean>


casProcessingFilterEntryPoint is very critical,
loginUrl is the CAS Server's /login url, you should set up your CAS Server(2.0 or 3.0) and config for
those JKS keystore after enable SSL in Tomcat(Tomcat 5.5/conf/server.xml) and place the cacerts that
have the CAS Server's public cert to Acegi Client's JDK/jre/lib/security/
Check serviceProperties to make sure thatSpringSide Service url is config as /j_acegi_cas_security_check

because Yale CAS use ticket cache for SSO impl, so we should config for statelessTicketCache
Just use springframework's ehcache for cacheManager.

SpringSide use jdbcDaoImpl which perform database authentication. So I am very happy to use it
ascasAuthoritiesPopulator , which will set use detail for the user. And these info are very useful for
application authorization.

<beanid="jdbcDaoImpl"
class
="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<propertyname="dataSource"ref="dataSource"/>
<propertyname="usersByUsernameQuery">
<value>
selectloginid,passwd,1fromss_userswherestatus='1'andloginid=?
</value>
</property>
<propertyname="authoritiesByUsernameQuery">
<value>
selectu.loginid,p.namefromss_usersu,ss_rolesr,ss_permissions
p,ss_user_roleur,ss_role_permisrpwhereu.id=ur.user_idand
r.id=ur.role_idandp.id=rp.permis_idand
r.id=rp.role_idandp.status='1'andu.loginid=?
</value>
</property>
</bean>


There is little difference between casclient 2.0.12 and Acegi, right?

Note that in my env, gzug:8080/springside is bookstore webapp
and sourcesite:8443 is the CAS 3 Server.

Hope for suggestion.....

分享到:
评论

相关推荐

    acegi安全策略与CAS整合

    在Web应用中, AceGI提供了一套强大的访问控制和身份验证机制,而CAS则作为外部认证服务器,可以为多个应用提供统一的用户验证。通过整合两者,可以简化用户登录流程,同时加强整体系统的安全性。 1.2 环境: 整合...

    Acegi Security整合CAS实例

    在Acegi Security与CAS的整合中,CAS负责用户的认证过程,即验证用户的身份;而Acegi Security则负责后续的应用程序授权,即确定用户可以访问哪些资源。这种分工明确的设计模式,既简化了开发者的集成工作,又提高了...

    acegi集成CAS示例

    - **配置CAS客户端**:首先,需要在AceGI的配置中添加对CAS的支持,这通常涉及到在`applicationContext-security.xml`文件中引入CAS的客户端组件,并配置CAS服务器的URL、服务验证URL等。 - **处理服务验证**:当...

    CAS及客户端Acegi的安装配置指南

    CAS处理用户认证,而Acegi则负责在客户端应用中的授权。理解并成功实施这一配置,不仅需要对SSO原理有所了解,还需要掌握Spring框架和数据库集成的相关知识。在实际操作过程中,可能会遇到各种问题,如网络连接问题...

    acegi-security-cas-0.7.1.jar.zip

    CAS服务器负责处理用户的登录验证,而Acegi Security则作为客户端,负责与CAS服务器进行通信,并处理在Spring应用中的认证流程。 在这个`acegi-security-cas-0.7.1.jar`文件中,包含了Acegi Security的CAS模块,它...

    acegi-security-cas-0.8.1.1.jar.zip

    在实际项目中,开发者需要将 Acegi Security-cas-0.8.1.1.jar 添加到项目的类路径中,并配置相关的安全拦截器、认证管理器和 CAS 服务器连接设置。例如,他们可能需要在 Spring 配置文件中定义 `...

    敏捷Acegi、CAS++构建安全的Java系统——part5

    敏捷Acegi、CAS++构建安全的Java系统pdf——part5

    acegi-security-cas-1.0.7.jar

    Acegi是一个专门为SpringFramework提供安全机制的项目,全称为Acegi Security System for Spring.

    acegi+cas整合工程及说明1

    将acegi和cas的war包修改并整合测试,里面包含所需依赖包。经过分卷压缩一共3个文件.

    敏捷Acegi、CAS构建安全的Java系统(part2)共四part

    JAVA开发专家:敏捷Acegi、CAS:构建安全的Java系统 pdf

    acegi-security-cas-1.0.7.jar.zip

    在实际应用中,开发者需要配置Acegi Security以连接到CAS服务器,并定义安全规则来控制用户对不同资源的访问。这可能涉及XML配置文件的编辑,以及自定义认证和授权策略的实现。此外,还需要在Web应用程序的入口点...

    acegi-security-cas-0.7.0.jar.zip

    CAS服务器负责验证用户身份,而Acegi Security则负责在客户端应用中处理授权逻辑。当用户首次登录CAS服务器后,后续访问其他支持CAS的应用时无需再次登录,提高了用户体验。 `acegi-security-cas-0.7.0.jar`是这个...

    acegi-security-cas-0.8.2.jar.zip

    在实际应用中,使用Acegi Security CAS时,你需要将jar文件添加到项目的类路径中,并在Spring的配置文件中配置Acegi Security的相关设置,包括定义安全拦截器、用户认证源、角色分配等。此外,你还需要在服务器端...

    springside 玩转acegi

    它会生成长期有效的令牌存储在客户端,下次登录时自动完成认证。 三、Acegi Security的工作流程 1. 用户尝试访问受保护的URL。 2. Acegi Security的过滤器链被触发,首先进行身份验证,如检查请求中的`...

    CAS 单点登录安装笔记3 -- 与acegi集成

    CAS 服务器负责验证用户的身份,而客户端应用则依赖于 CAS 服务器的认证结果,无需存储和验证用户凭证。 **三、集成背景** 将 CAS 与 Acegi 结合,可以使 Acegi 应用程序利用 CAS 的身份验证服务,避免了每个应用...

    acegi basic认证具体demo

    最后,为了使Basic认证工作,你需要在客户端(通常是浏览器)发送请求时附带正确的Authorization头。例如,当用户尝试访问受保护的资源时,如果没有提供有效的凭据,服务器会返回一个401未授权响应,此时浏览器会弹...

    acegi-security-cas-0.8.3.jar.zip

    在实际使用过程中,开发者需要了解如何配置Acegi Security以连接到CAS服务器,设置认证和授权规则,以及处理各种安全事件。这通常涉及到在Spring配置文件中定义安全相关的bean,如CasAuthenticationProvider、...

    acegi-security-cas-0.8.1.jar.zip

    在提供的压缩包文件中,`acegi-security-cas-0.8.1.jar`是实际的库文件,包含了Acegi Security CAS的所有类和资源,可以被Spring应用程序作为依赖引入。而`springframework-license.txt`很可能是Spring框架的许可...

Global site tag (gtag.js) - Google Analytics