cas4.0单点登录的配置

package com.rquest.riskmaster.config;


import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.util.AssertionThreadLocalFilter;
import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.embedded.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class CasConfiguration {
private static final Logger logger = LoggerFactory.getLogger(CasConfiguration.class);


/**
     * CAS过滤器
     *
     * @return
     * @author SHANHY
     * @create  2016年1月17日
     */
@Value("${casServerLoginUrl}")    
private String casServerLoginUrl;
@Value("${clientServerName}")    
private String clientServerName;
@Value("${casServerUrlPrefix}")    
private String casServerUrlPrefix;

 private static boolean casEnabled = true; 
   
 
 /** 
  * 用于实现单点登出功能 
  */
 @Bean
 public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() { 
   ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener = new ServletListenerRegistrationBean<>(); 
   listener.setEnabled(casEnabled); 
   listener.setListener(new SingleSignOutHttpSessionListener()); 
   listener.setOrder(1); 
   return listener; 
 } 
 
 /** 
  * 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前 
  */
/*  @Bean
 public FilterRegistrationBean logOutFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   LogoutFilter logoutFilter = new LogoutFilter(casServerHostLoginUrl ,new SecurityContextLogoutHandler()); 
   filterRegistration.setFilter(logoutFilter); 
   filterRegistration.setEnabled(casEnabled); 
     filterRegistration.addUrlPatterns("/logout"); 
   filterRegistration.addInitParameter("casServerUrlPrefix", casServerUrlPrefix); 
   filterRegistration.addInitParameter("serverName", serverName); 
   filterRegistration.setOrder(2); 
   logger.info("logOutFilter===第二启动");
   return filterRegistration; 
 } */
 
 /** 
  * 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前 
  */
 @Bean
 public FilterRegistrationBean singleSignOutFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   filterRegistration.setFilter(new SingleSignOutFilter()); 
   filterRegistration.setEnabled(casEnabled); 
     filterRegistration.addUrlPatterns("/*"); 
     filterRegistration.addUrlPatterns("/logout");
   filterRegistration.setOrder(3); 
   return filterRegistration; 
 } 
 
 
 /** 
  * 该过滤器负责用户的认证工作 
  * cas.server.login.url=https://rquest.sso.cas:8443/cas/login
  * server.name=http://localhost:8080
  */
 @Bean
 public FilterRegistrationBean authenticationFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   filterRegistration.setFilter(new AuthenticationFilter()); 
   filterRegistration.setEnabled(casEnabled); 
     filterRegistration.addUrlPatterns("/*"); 
   //casServerLoginUrl:cas服务的登陆url 
   filterRegistration.addInitParameter("casServerLoginUrl", casServerLoginUrl); 
   //本项目登录ip+port 
   filterRegistration.addInitParameter("serverName",clientServerName); 
//    filterRegistration.addInitParameter("useSession", "true"); 
   filterRegistration.addInitParameter("redirectAfterValidation","true"); 
   filterRegistration.setOrder(4); 
   return filterRegistration; 
 } 
 
 /** 
  * 该过滤器负责对Ticket的校验工作 
  */
 @Bean
 public FilterRegistrationBean cas20ProxyReceivingTicketValidationFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   Cas20ProxyReceivingTicketValidationFilter cas20ProxyReceivingTicketValidationFilter = new Cas20ProxyReceivingTicketValidationFilter(); 
   //cas20ProxyReceivingTicketValidationFilter.setTicketValidator(cas20ServiceTicketValidator()); 
//    cas20ProxyReceivingTicketValidationFilter.setServerName(serverName); 
   filterRegistration.setFilter(cas20ProxyReceivingTicketValidationFilter); 
   filterRegistration.setEnabled(casEnabled); 
     filterRegistration.addUrlPatterns("/*"); 
   filterRegistration.addInitParameter("casServerUrlPrefix", casServerUrlPrefix); 
   filterRegistration.addInitParameter("serverName",clientServerName); 
   filterRegistration.setOrder(5); 
   return filterRegistration; 
 } 
 
 
 /** 
  * 该过滤器对HttpServletRequest请求包装, 可通过HttpServletRequest的getRemoteUser()方法获得登录用户的登录名 
  */
 @Bean
 public FilterRegistrationBean httpServletRequestWrapperFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   filterRegistration.setFilter(new HttpServletRequestWrapperFilter()); 
   filterRegistration.setEnabled(true); 
     filterRegistration.addUrlPatterns("/*"); 
   filterRegistration.setOrder(6); 
   return filterRegistration; 
 } 
 
 /** 
  * 该过滤器使得可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 
  比如AssertionHolder.getAssertion().getPrincipal().getName()。 
  这个类把Assertion信息放在ThreadLocal变量中,这样应用程序不在web层也能够获取到当前登录信息 
  */
 @Bean
 public FilterRegistrationBean assertionThreadLocalFilter() { 
   FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
   filterRegistration.setFilter(new AssertionThreadLocalFilter()); 
   filterRegistration.setEnabled(true); 
     filterRegistration.addUrlPatterns("/*"); 
   filterRegistration.setOrder(7); 
   return filterRegistration; 
 } 


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CAS(Central Authentication Service)是一种单点登录协议,它允许用户一次登录即可在多个应用程序中进行身份验证和授权。要使用CAS完成单点登录,您需要在服务器上安装CAS服务器,并将其配置为您的应用程序可以使用的身份验证源。在您的应用程序中,您需要使用CAS客户端库来与CAS服务器进行通信,以验证用户身份和授权访问。用户通过CAS登录后,应用程序将从CAS服务器获取身份验证令牌,以便在用户访问应用程序时进行身份验证。这样,用户就可以在不需要再次输入凭据的情况下访问多个应用程序了。 ### 回答2: CAS(Central Authentication Service)是一种基于标准协议的单点登录解决方案,用于在多个应用系统中实现一次登录多次访问的功能。以下是使用CAS完成单点登录的步骤: 1. 部署CAS服务器:首先,需要搭建CAS服务器。可以选择使用开源的CAS服务器实现,如Apereo CAS或Jasig CAS。将CAS服务器安装在Web容器中,如Tomcat。 2. 配置CAS服务器:在CAS服务器上配置相关参数,包括CAS服务端口、证书、认证方式等。还需配置相应的用户认证方式,如LDAP、数据库等,以便CAS从这些认证源中验证用户身份。 3. 配置应用系统:将需要实现单点登录的应用系统配置CAS客户端。CAS客户端负责与CAS服务器进行通信并获取用户认证信息。在应用系统的配置文件中,设置CAS服务器的地址和端口,并指定CAS授权和认证回调URL。 4. 用户访问应用系统:当用户访问某个应用系统时,应用系统检测用户是否已登录。若未登录,则将用户重定向至CAS服务器进行认证。 5. CAS认证流程:用户在CAS服务器上输入用户名和密码进行认证。CAS服务器通过预先配置的认证方式,如LDAP或数据库,验证用户身份的合法性。若认证成功,则CAS服务器生成一个票据(ticket),并将用户重定向至应用系统的回调URL,并在URL中附带生成的票据。 6. 应用系统认证处理:应用系统接收到CAS服务器回调的URL,提取URL中的票据信息。应用系统通过与CAS服务器的通信,校验票据的有效性。若票据有效,则应用系统将用户标识为已认证,完成单点登录。 7. 单点退出:当用户在某个应用系统中执行退出操作时,应用系统将用户重定向至CAS服务器进行单点退出。CAS服务器会通知其他已登录的应用系统将用户标记为已退出,并且跳转到CAS服务器的退出页面。 通过CAS实现单点登录,用户只需登录一次,即可访问多个应用系统,提高了用户体验,减少了重复登录的繁琐。同时,也可以提高安全性和统一管理性,减少密码泄露的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sl4379

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值