CAS客户端对接

**需求:**输入项目地址(例:127.0.0.1:8080)时,判断有没有登录CAS,没有则跳转CAS登录,登录完成再返回项目地址,且需要获取到CAS登录用户的用户名。
实现:
第一步:搭建好CAS服务,这个在上一篇博客写了如何搭建,传送门CAS服务部署以及配置登陆成功跳转地址
第二步:接入客户端可以常用第三方的库cas-client-autoconfig-support来对接,比较快捷,迅速实现,或者可以用cas-client-support-springboot集成到boot项目
  首先pom文件中添加依赖

<!-- CAS依赖包 -->
        <dependency>
            <groupId>net.unicon.cas</groupId>
            <artifactId>cas-client-autoconfig-support</artifactId>
            <version>1.5.0-GA</version>
        </dependency>

  然后在application.properties中添加配置

#cas服务端的登录地址
cas.server-login-url=http://127.0.0.1:8070/login
#cas服务端的地址
cas.server-url-prefix: http://127.0.0.1:8070
#当前服务器的地址(客户端)
cas.client-host-url: http://127.0.0.1:8801

  然后自定义一个重定向策略类,这里还是和默认的策略一样,可以根据项目需要自行更改

import org.jasig.cas.client.authentication.AuthenticationRedirectStrategy;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @ClassName: CustomAuthticationRedirectStrategy
 * @Description:
 * @author: zhang zihao
 * @date: 2022/8/6  11:05
 */
public class CustomAuthticationRedirectStrategy implements AuthenticationRedirectStrategy {

    @Override
    public void redirect(HttpServletRequest request, HttpServletResponse response, String potentialRedirectUrl) throws IOException {
//        response.setCharacterEncoding("utf-8");
//        response.setContentType("application/json; charset=utf-8");
//        PrintWriter out = response.getWriter();
//        out.write("401");
        //response重定向
        response.sendRedirect(potentialRedirectUrl);
    }
}

  最后编写拦截器,其中@EnableCasClient注解一定要加,开启CAS支持,这里我的CAS登录地址和客户端地址(当前项目地址)我都写在application.properties配置文件里面

import ktw.micro.service.proxy.center.feign.AuthFeign;
import net.unicon.cas.client.configuration.CasClientConfigurerAdapter;
import net.unicon.cas.client.configuration.EnableCasClient;
import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName: CASConfig
 * @Description:
 * @author: zhang zihao
 * @date: 2022/8/6  11:06
 */
@Configuration
@EnableCasClient
public class CASConfig extends CasClientConfigurerAdapter {
    @Value("${cas.server-login-url}")
    private String CAS_SERVER_URL_LOGIN;
    @Value("${cas.client-host-url}")
    private String SERVER_NAME;

    private static final String AUTHENTICATION_REDIRECT_STRATEGY_CLASS  = "org.muses.jeeplatform.oa.cas.CustomAuthticationRedirectStrategy";

    @Override
    public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
        super.configureAuthenticationFilter(authenticationFilter);
        authenticationFilter.getInitParameters().put("authenticationRedirectStrategyClass",AUTHENTICATION_REDIRECT_STRATEGY_CLASS);
    }

    @Override
    public void configureValidationFilter(FilterRegistrationBean validationFilter) {
        Map<String, String> initParameters = validationFilter.getInitParameters();
        initParameters.put("encodeServiceUrl", "false");
    }

    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new AuthenticationFilter());
        registrationBean.addUrlPatterns("/*");
        Map<String, String> initParameters = new HashMap<String,String>(4);
        initParameters.put("casServerLoginUrl",CAS_SERVER_URL_LOGIN);
        initParameters.put("serverName",SERVER_NAME);
        initParameters.put("ignorePattern","/logoutSuccess/*");
        // 自定义重定向策略
        initParameters.put("authenticationRedirectStrategyClass", AUTHENTICATION_REDIRECT_STRATEGY_CLASS);
        registrationBean.setInitParameters(initParameters);
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

第三步:上述步骤完成后,启动项目,请求项目接口,我这里使用的是以下这个接口(127.0.0.1:8080/proxy),CAS未登录的情况下,首先跳到CAS登录界面,登录完成后重定向到127.0.0.1:8080/proxy

@RestController
public class ProxyController {
    @Resource
    private ProxyService proxyService;
    /**
    * @param servletResponse
    * @param url 去往系统的地址
    * @description
    * @return void
    * @author zhang zihao
    * @date 2022/8/3
     * http://host:port/proxy?url=xxxx
    **/
    @GetMapping("/proxy")
    public void proxy(HttpServletRequest request, HttpServletResponse servletResponse, String url) {
        proxyService.proxy(request,servletResponse,url);
    }
}

第四步:客户端如何获取到CAS登录用户,CAS5.3会在配置文件里面配置一个默认的用户casuser,以下代码就是获取到这个用户。

Principal principal=request.getUserPrincipal();
String name=principal.getName();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAS(Central Authentication Service)是一种单点登录(SSO)协议,用于实现在多个应用系统中共享用户登录状态的功能。CAS客户端文档Java是指CAS协议的Java客户端的使用文档。 CAS客户端文档Java主要包括以下内容: 1. 安装和配置:首先需要将CAS客户端Java库文件导入到项目中,并配置必要的参数,如CAS服务器地址、服务端口等。 2. 登录和认证:CAS客户端提供了一套API接口,用于用户登录认证。开发者可以通过调用这些接口实现用户登录功能。用户登录后,CAS客户端会将用户信息保存在本地的会话中,以便在后续的请求中进行身份验证。 3. 单点登录(SSO):CAS客户端能够与CAS服务器进行通信,实现跨应用系统的单点登录功能。用户只需要登录一次,即可在多个应用系统中共享登录状态,无需再次输入用户名和密码。 4. 会话管理:CAS客户端还提供了一套会话管理机制,用于管理用户登录状态。开发者可以通过这些机制来管理用户的登录会话、注销会话等。 5. 安全机制:CAS客户端实现了一套安全机制,用于保护用户的登录状态和用户信息的安全性。开发者可以根据需要进行配置,以确保用户数据的安全。 通过阅读CAS客户端文档Java,开发者可以了解CAS客户端的基本原理和使用方法,能够更好地使用CAS客户端来实现单点登录功能,提升系统的用户登录体验和安全性。同时,该文档还提供了示例代码和常见问题解答,方便开发者快速上手和解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值