全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

spring boot整合CAS配置详解

在下不才,以下是我花了好几天的时间才整合出来的在spring boot里面的CAS配置整合

为了帮助没搞定的人,毕竟自己踩了很多坑,一步一步爬过来的,有什么不足之处可以给建议  谢谢(小部分代码是整合他人的)

1.不多废话,直接上最重要的代码,以下代码整合cas的重要过程

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.jasig.cas.client.validation.Cas20ServiceTicketValidator; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.web.servlet.FilterRegistrationBean; 
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.security.cas.ServiceProperties; 
import org.springframework.security.cas.authentication.CasAuthenticationProvider; 
import org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService; 
import org.springframework.security.web.authentication.logout.LogoutFilter; 
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; 
 
import java.util.List; 
 
 
@Configuration 
public class CasConfig { 
   
  @Autowired 
  SpringCasAutoconfig autoconfig; 
   
  private static boolean casEnabled = true; 
   
  public CasConfig() { 
  } 
 
  @Bean 
  public SpringCasAutoconfig getSpringCasAutoconfig(){ 
    return new SpringCasAutoconfig(); 
  } 
 
  /** 
   * 用于实现单点登出功能 
   */ 
  @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(autoconfig.getCasServerUrlPrefix() + "/logout?service=" + autoconfig.getServerName(),new SecurityContextLogoutHandler()); 
    filterRegistration.setFilter(logoutFilter); 
    filterRegistration.setEnabled(casEnabled); 
    if(autoconfig.getSignOutFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters()); 
    else 
      filterRegistration.addUrlPatterns("/logout"); 
    filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix()); 
    filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); 
    filterRegistration.setOrder(2); 
    return filterRegistration; 
  } 
 
  /** 
   * 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前 
   */ 
  @Bean 
  public FilterRegistrationBean singleSignOutFilter() { 
    FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
    filterRegistration.setFilter(new SingleSignOutFilter()); 
    filterRegistration.setEnabled(casEnabled); 
    if(autoconfig.getSignOutFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getSignOutFilters()); 
    else 
      filterRegistration.addUrlPatterns("/*"); 
    filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix()); 
    filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); 
    filterRegistration.setOrder(3); 
    return filterRegistration; 
  } 
 
  /** 
   * 该过滤器负责用户的认证工作 
   */ 
  @Bean 
  public FilterRegistrationBean authenticationFilter() { 
    FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
    filterRegistration.setFilter(new AuthenticationFilter()); 
    filterRegistration.setEnabled(casEnabled); 
    if(autoconfig.getAuthFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getAuthFilters()); 
    else 
      filterRegistration.addUrlPatterns("/*"); 
    //casServerLoginUrl:cas服务的登陆url 
    filterRegistration.addInitParameter("casServerLoginUrl", autoconfig.getCasServerLoginUrl()); 
    //本项目登录ip+port 
    filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); 
    filterRegistration.addInitParameter("useSession", autoconfig.isUseSession()?"true":"false"); 
    filterRegistration.addInitParameter("redirectAfterValidation", autoconfig.isRedirectAfterValidation()?"true":"false"); 
    filterRegistration.setOrder(4); 
    return filterRegistration; 
  } 
 
  /** 
   * 该过滤器负责对Ticket的校验工作 
   */ 
  @Bean 
  public FilterRegistrationBean cas20ProxyReceivingTicketValidationFilter() { 
    FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
    Cas20ProxyReceivingTicketValidationFilter cas20ProxyReceivingTicketValidationFilter = new Cas20ProxyReceivingTicketValidationFilter(); 
    //cas20ProxyReceivingTicketValidationFilter.setTicketValidator(cas20ServiceTicketValidator()); 
    cas20ProxyReceivingTicketValidationFilter.setServerName(autoconfig.getServerName()); 
    filterRegistration.setFilter(cas20ProxyReceivingTicketValidationFilter); 
    filterRegistration.setEnabled(casEnabled); 
    if(autoconfig.getValidateFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getValidateFilters()); 
    else 
      filterRegistration.addUrlPatterns("/*"); 
    filterRegistration.addInitParameter("casServerUrlPrefix", autoconfig.getCasServerUrlPrefix()); 
    filterRegistration.addInitParameter("serverName", autoconfig.getServerName()); 
    filterRegistration.setOrder(5); 
    return filterRegistration; 
  } 
 
 
  /** 
   * 该过滤器对HttpServletRequest请求包装, 可通过HttpServletRequest的getRemoteUser()方法获得登录用户的登录名 
   * 
   */ 
  @Bean 
  public FilterRegistrationBean httpServletRequestWrapperFilter() { 
    FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); 
    filterRegistration.setFilter(new HttpServletRequestWrapperFilter()); 
    filterRegistration.setEnabled(true); 
    if(autoconfig.getRequestWrapperFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getRequestWrapperFilters()); 
    else 
      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); 
    if(autoconfig.getAssertionFilters().size()>0) 
      filterRegistration.setUrlPatterns(autoconfig.getAssertionFilters()); 
    else 
      filterRegistration.addUrlPatterns("/*"); 
    filterRegistration.setOrder(7); 
    return filterRegistration; 
  } 
} 

2.为了让你们更省力且直接的看到效果,我把相关配置也贴出来

import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.context.annotation.Configuration; 
 
import java.util.Arrays; 
import java.util.List; 
 
@ConfigurationProperties(prefix = "spring.cas") 
public class SpringCasAutoconfig { 
 
  static final String separator = ","; 
 
  private String validateFilters; 
  private String signOutFilters; 
  private String authFilters; 
  private String assertionFilters; 
  private String requestWrapperFilters; 
 
  private String casServerUrlPrefix; 
  private String casServerLoginUrl; 
  private String serverName; 
  private boolean useSession = true; 
  private boolean redirectAfterValidation = true; 
 
  public List<String> getValidateFilters() { 
    return Arrays.asList(validateFilters.split(separator)); 
  } 
  public void setValidateFilters(String validateFilters) { 
    this.validateFilters = validateFilters; 
  } 
  public List<String> getSignOutFilters() { 
    return Arrays.asList(signOutFilters.split(separator)); 
  } 
  public void setSignOutFilters(String signOutFilters) { 
    this.signOutFilters = signOutFilters; 
  } 
  public List<String> getAuthFilters() { 
    return Arrays.asList(authFilters.split(separator)); 
  } 
  public void setAuthFilters(String authFilters) { 
    this.authFilters = authFilters; 
  } 
  public List<String> getAssertionFilters() { 
    return Arrays.asList(assertionFilters.split(separator)); 
  } 
  public void setAssertionFilters(String assertionFilters) { 
    this.assertionFilters = assertionFilters; 
  } 
  public List<String> getRequestWrapperFilters() { 
    return Arrays.asList(requestWrapperFilters.split(separator)); 
  } 
  public void setRequestWrapperFilters(String requestWrapperFilters) { 
    this.requestWrapperFilters = requestWrapperFilters; 
  } 
  public String getCasServerUrlPrefix() { 
    return casServerUrlPrefix; 
  } 
  public void setCasServerUrlPrefix(String casServerUrlPrefix) { 
    this.casServerUrlPrefix = casServerUrlPrefix; 
  } 
  public String getCasServerLoginUrl() { 
    return casServerLoginUrl; 
  } 
  public void setCasServerLoginUrl(String casServerLoginUrl) { 
    this.casServerLoginUrl = casServerLoginUrl; 
  } 
  public String getServerName() { 
    return serverName; 
  } 
  public void setServerName(String serverName) { 
    this.serverName = serverName; 
  } 
  public boolean isRedirectAfterValidation() { 
    return redirectAfterValidation; 
  } 
  public void setRedirectAfterValidation(boolean redirectAfterValidation) { 
    this.redirectAfterValidation = redirectAfterValidation; 
  } 
  public boolean isUseSession() { 
    return useSession; 
  } 
  public void setUseSession(boolean useSession) { 
    this.useSession = useSession; 
  } 
 
} 

3.配置文件  dev.yml

  #cas client config 
  spring:cas: 
  sign-out-filters: /logout 
  auth-filters: /* 
  validate-filters: /* 
  request-wrapper-filters: /* 
  assertion-filters: /* 
  cas-server-login-url: cas登录url 
  cas-server-url-prefix:cas登录域名 
  redirect-after-validation: true 
  use-session: true 
  server-name: http://localhost:8080

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot集成cas  # boot  # cas  # 整合  # springboot与mybatis整合实例详解(完美融合)  # springboot实现拦截器之验证登录示例  # Spring Boot 启动端口如何启动  # 在Spring Boot中如何使用log4j记录日志  # 详解eclipse下创建第一个spring boot项目  # 深入理解Spring Boot的日志管理  # 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询  # 详解spring boot配置单点登录  # spring boot实现过滤器和拦截器demo  # SpringBoot获取yml和properties配置文件的内容  # 单点  # 放在  # 登录名  # 的人  # 有什么  # 几天  # 最重要  # 不多  # 我把  # 可以通过  # 花了  # 可通过  # 贴出  # 配置文件  # 大家多多  # 不足之处  # 应用程序  # 爬过  # logout  # GrantedAuthorityFromAssertionAttributesUserDetails 


相关文章: 建站主机CVM配置优化、SEO策略与性能提升指南  子杰智能建站系统|零代码开发与AI生成SEO优化指南  制作企业网站建设方案,怎样建设一个公司网站?  深圳网站制作的公司有哪些,dido官方网站?  如何通过VPS建站实现广告与增值服务盈利?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  5种Android数据存储方式汇总  高端网站建设与定制开发一站式解决方案 中企动力  存储型VPS适合搭建中小型网站吗?  h5网站制作工具有哪些,h5页面制作工具有哪些?  如何零成本快速生成个人自助网站?  网站制作话术技巧,网站推广做的好怎么话术?  建站主机选哪家性价比最高?  代购小票制作网站有哪些,购物小票的简要说明?  如何通过FTP空间快速搭建安全高效网站?  如何通过主机屋免费建站教程十分钟搭建网站?  制作网站的基本流程,设计网站的软件是什么?  建站主机空间推荐 高性价比配置与快速部署方案解析  网站微信制作软件,如何制作微信链接?  油猴 教程,油猴搜脚本为什么会网页无法显示?  广平建站公司哪家专业可靠?如何选择?  建站主机数据库如何配置才能提升网站性能?  如何快速查询域名建站关键信息?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何快速生成专业多端适配建站电话?  如何用AWS免费套餐快速搭建高效网站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  建站之星安装提示数据库无法连接如何解决?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何用美橙互联一键搭建多站合一网站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  建站之星logo尺寸如何设置最合适?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在Windows服务器上快速搭建网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  重庆市网站制作公司,重庆招聘网站哪个好?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何通过wdcp面板快速创建网站?  建站之星如何通过成品分离优化网站效率?  如何在云主机上快速搭建网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  网站制作公司排行榜,四大门户网站排名?  如何选择高效稳定的ISP建站解决方案?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何通过老薛主机一键快速建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。