• cas-client基于CAS协议客户端搭建


    前面介绍了cas服务端的搭建,今天来介绍一下基于cas协议客户端的搭建,下面是服务端搭建的介绍

    CAS服务端的搭建并配置OAtuh2.0协议_t梧桐树t的博客-CSDN博客

    解决了服务端的问题,客户端的搭建就简单多了

    引入cas-client依赖

    1. <dependency>
    2. <groupId>net.unicon.casgroupId>
    3. <artifactId>cas-client-autoconfig-supportartifactId>
    4. <version>2.3.0-GAversion>
    5. dependency>

    注意:仅为简单测试并未引入其他安全框架,如果有其他安全框架需要自去改拦截器

     增加配置

    在yml配置文件中添加如下配置

    1. #cas单点登录
    2. cas:
    3. server-url-prefix: ${cas.client-host-url}:8443/cas
    4. server-login-url: ${cas.server-url-prefix}/login
    5. client-host-url: https://cas.test.com #换成自己的域名
    6. validation-type: cas3

     在启动类上添加@EnableCasClient注解

    编写拦截器

    此处代码参考:CAS+OAuth2的SSO认证授权单点登录_cas能实现oauth2_一码贪欢的博客-CSDN博客

     CASFilterConfig拦截器配置

    1. @Configuration
    2. public class CASFilterConfig {
    3. @Value("${cas.server-url-prefix}")
    4. private String CAS_URL;
    5. @Value("${cas.client-host-url}")
    6. private String APP_URL;
    7. /**
    8. * 配置监听器
    9. * @return
    10. */
    11. @Bean
    12. public ServletListenerRegistrationBean servletListenerRegistrationBean(){
    13. ServletListenerRegistrationBean listenerRegistrationBean = new ServletListenerRegistrationBean();
    14. listenerRegistrationBean.setListener(new SingleSignOutHttpSessionListener());
    15. listenerRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    16. return listenerRegistrationBean;
    17. }
    18. /**
    19. * 单点登录退出
    20. * @return
    21. */
    22. @Bean
    23. public FilterRegistrationBean singleSignOutFilter(){
    24. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    25. registrationBean.setFilter(new SingleSignOutFilter());
    26. registrationBean.addUrlPatterns("/*");
    27. registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL );
    28. registrationBean.setName("CAS Single Sign Out Filter");
    29. registrationBean.setOrder(2);
    30. return registrationBean;
    31. }
    32. /**
    33. * 单点登录认证
    34. * @return
    35. */
    36. @Bean
    37. public FilterRegistrationBean AuthenticationFilter(){
    38. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    39. registrationBean.setFilter(new AuthenticationFilter());
    40. registrationBean.addUrlPatterns("/*");
    41. registrationBean.setName("CAS Filter");
    42. registrationBean.addInitParameter("casServerLoginUrl",CAS_URL);
    43. registrationBean.addInitParameter("serverName", APP_URL );
    44. registrationBean.setOrder(3);
    45. return registrationBean;
    46. }
    47. /**
    48. * 单点登录校验
    49. * @return
    50. */
    51. @Bean
    52. public FilterRegistrationBean cas30ProxyReceivingTicketValidationFilter(){
    53. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    54. registrationBean.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
    55. registrationBean.addUrlPatterns("/*");
    56. registrationBean.setName("CAS Validation Filter");
    57. registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL );
    58. registrationBean.addInitParameter("serverName", APP_URL );
    59. registrationBean.setOrder(4);
    60. return registrationBean;
    61. }
    62. /**
    63. * 单点登录请求包装
    64. * @return
    65. */
    66. @Bean
    67. public FilterRegistrationBean httpServletRequestWrapperFilter(){
    68. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    69. registrationBean.setFilter(new HttpServletRequestWrapperFilter());
    70. registrationBean.addUrlPatterns("/*");
    71. registrationBean.setName("CAS HttpServletRequest Wrapper Filter");
    72. registrationBean.setOrder(5);
    73. return registrationBean;
    74. }
    75. /**
    76. * 获取当前登录用户信息
    77. * @return
    78. */
    79. @Bean
    80. public FilterRegistrationBean getLoginUserInfoFilter(){
    81. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    82. registrationBean.setFilter(new LoginUserInfoFilter());
    83. registrationBean.addUrlPatterns("/*");
    84. registrationBean.setName("loginUserInfoFilter");
    85. registrationBean.setOrder(6);
    86. return registrationBean;
    87. }
    88. }

     CASUtil 获取登录人

    1. public class CASUtil {
    2. public static String getLoginNameFromCas(HttpServletRequest request) {
    3. Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
    4. if(assertion!= null) {
    5. AttributePrincipal principal = assertion.getPrincipal();
    6. return principal.getName();
    7. } else {
    8. return null;
    9. }
    10. }
    11. }

     LoginUserInfoFilter 登录拦截器

    1. public class LoginUserInfoFilter implements Filter {
    2. Logger logger = LoggerFactory.getLogger(LoginUserInfoFilter.class);
    3. @Override
    4. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    5. HttpServletRequest request_ = (HttpServletRequest)request;
    6. String loginName = CASUtil.getLoginNameFromCas(request_);
    7. if(!StringUtils.isEmpty(loginName)){
    8. logger.info("访问者 :" +loginName);
    9. request_.getSession().setAttribute("loginName", loginName);
    10. }
    11. chain.doFilter(request, response);
    12. }
    13. }

    测试Controller

    1. @Controller
    2. public class TestController {
    3. @GetMapping("/hello")
    4. @ResponseBody
    5. public String hello() {
    6. return "cas-client11111!!!!!!!!";
    7. }
    8. //登出
    9. @RequestMapping("/logout")
    10. public String logout(HttpSession session){
    11. session.invalidate();
    12. return "redirect:https://cas.test.com:8443/cas/logout";
    13. }
    14. }

    测试

    启动客户端后访问 http://127.0.0.1:8081/hello

     输入用户名密码后,自动反问了客户端的接口

  • 相关阅读:
    JSP JAVA javaweb企业仓库库存管理系统(仓库进销存管理系统ssm库存管理系统仓库管理系统)
    三维地图(3D地图)离线地图开发
    (附源码)云南濒危动物知识问答系统的设计与实现 毕业设计 020833
    NeuralProphet之一:安装与使用
    iRGD-PEG-SH 环肽iRGD聚乙二醇巯基 SH-PEG-iRGD iRGD-SH-PEG 的参数信息
    python对英雄皮肤进行图片采集~
    情人节后属于单身狗的浪漫
    [激光原理与应用-39]:《光电检测技术-6》- 光干涉的原理与基础
    目标检测YOLO实战应用案例100讲-基于YOLOv5_tiny算法的路面裂缝智能检测
    Qt5开发从入门到精通——第四篇七节(工具盒类)
  • 原文地址:https://blog.csdn.net/winerpro/article/details/132907299