• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > spring boot整合CAS配置详解

spring boot整合CAS配置详解

作者:这样不太好吧 字体:[增加 减小] 来源:互联网 时间:2017-05-28

这样不太好吧 通过本文主要向大家介绍了cas spring boot,spring boot注解详解,spring boot详解,spring boot教程,spring boot等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在下不才,以下是我花了好几天的时间才整合出来的在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; 
  } 
} 
</div>

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

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • spring boot整合CAS配置详解
  • spring boot整合CAS配置详解

相关文章

  • 2017-05-28Spring中配置和读取多个Properties文件的方式方法
  • 2017-05-28java基于反射得到对象属性值的方法
  • 2017-05-28Java Socket编程(五) 简单的WEB服务器
  • 2017-08-27Java 内存模型
  • 2017-05-28浅析Java中clone()方法浅克隆与深度克隆
  • 2017-05-28Spring Boot集成Druid数据库连接池
  • 2017-05-28iOS socket网络编程实例详解
  • 2017-05-28详解用Spring Boot零配置快速创建web项目
  • 2017-05-28Java微信二次开发(三) Java微信各类型消息封装
  • 2017-05-28Java String对象使用方法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java实现微信H5支付方法详解
    • window下安装和配置maven环境
    • SSM框架+Plupload实现分块上传大文件示例
    • spring注解识别一个接口的多个实现类方法
    • Java String对象使用方法详解
    • Java中断线程的方法
    • Struts2 控制文件上传下载功能实例代码
    • Java实例化的几种方法总结
    • Spring Boot无缝集成MongoDB
    • SpringBoot拦截器的使用小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有