SpringBoot整合CAS服务
SpringBoot整合CAS服务环境:电脑:win10cas版本:5.3.14后端:SpringBoot数据库:MySQL开发工具:IDEA两个后端服务:一个端口8888,一个9999。看下效果:1.首先,我们分别访问两个系统的某个静态资源。1是该服务端口,2是访问的资源。发现进入了cas的登录页面。第二个服务同样如此。2.在第一个服务登录成功,进入到我一开始访问的页面,我们再来看下访问第二个服
·
SpringBoot整合CAS服务
环境:
电脑:win10
cas版本:5.3.14
后端:SpringBoot
数据库:MySQL
开发工具:IDEA
两个后端服务:一个端口8888,一个9999。
看下效果:
1.首先,我们分别访问两个系统的某个静态资源。
1是该服务端口,2是访问的资源。发现进入了cas的登录页面。
第二个服务同样如此。
2.
在第一个服务登录成功,进入到我一开始访问的页面,我们再来看下访问第二个服务的资源。
这时我们刷新下页面就直接进来了,就省去了登录操作。
接下来我们看如何配置实现该功能,前提是有两个客户端服务。(这里省去了搭建cas服务端的操作,可参考之前的博客搭建:https://blog.csdn.net/weixin_45732391/article/details/123462845?spm=1001.2014.3001.5502)
一、修改pom文件
在pom文件里添加客户端依赖。
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.5.0</version>
</dependency>
二、添加url验证策略对象
package com.example.demo.config;
import org.jasig.cas.client.authentication.UrlPatternMatcherStrategy;
import java.util.regex.Pattern;
public class SimpleUrlPatternMatcher implements UrlPatternMatcherStrategy {
private Pattern pattern;
@Override
public boolean matches(String s) {
return this.pattern.matcher(s).find();
}
@Override
public void setPattern(String s) {
this.pattern = Pattern.compile(s);
}
}
二、添加客户端配置对象
package com.example.demo.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.HttpServletRequestWrapperFilter;
import org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter;
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 java.util.HashMap;
import java.util.Map;
@Configuration
public class CasClientConfig {
//cas服务前缀
private static final String CAS_SERVER_URL_PREFIX="http://localhost:8443/cas/";
//cas服务登录地址
private static final String CAS_SERVER_LOGIN_URL="http://localhost:8443/cas/login";
//本机服务的名称
private static final String SERVER_NAME="http://localhost:9999";
//登出过滤器
@Bean
public FilterRegistrationBean filterSingleRegistrationBean(){
System.out.println("----filterSingleRegistrationBean-----");
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new SingleSignOutFilter());
//拦截所有的url
registrationBean.addUrlPatterns("/*");
Map<String,String> init = new HashMap<String,String>();
init.put("casServerUrlPrefix",CAS_SERVER_URL_PREFIX);
registrationBean.setInitParameters(init);
//设置调用顺序
registrationBean.setOrder(1);
return registrationBean;
}
//验证过滤器
@Bean
public FilterRegistrationBean filterValidRegistrationBean(){
System.out.println("----filterValidRegistrationBean-----");
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
filterRegistrationBean.addUrlPatterns("/*");
Map<String,String> init = new HashMap<String,String>();
init.put("casServerUrlPrefix",CAS_SERVER_URL_PREFIX);
init.put("serverName",SERVER_NAME);
//将登录用户信息放入session,默认为true
init.put("useSession","true");
filterRegistrationBean.setInitParameters(init);
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
//认证过滤器
@Bean
public FilterRegistrationBean filterAuthenticationRegistrationBean(){
System.out.println("----filterAuthenticationRegistrationBean-----");
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new AuthenticationFilter());
filterRegistrationBean.addUrlPatterns("/*");
Map<String,String> init = new HashMap<String,String>();
init.put("casServerLoginUrl",CAS_SERVER_LOGIN_URL);
init.put("serverName",SERVER_NAME);
//当前服务退出的方法路径,我这里没写,先注释掉
// init.put("ignorePattern","");
//路径匹配策略
init.put("ignoreUrlPatternType","com.example.demo.config.SimpleUrlPatternMatcher");
filterRegistrationBean.setInitParameters(init);
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
//包装过滤器
@Bean
public FilterRegistrationBean filterWrapperRegistrationBean(){
System.out.println("----filterWrapperRegistrationBean-----");
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new HttpServletRequestWrapperFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean servletListenerRegistrationBean(){
System.out.println("----servletListenerRegistrationBean-----");
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new SingleSignOutHttpSessionListener());
servletListenerRegistrationBean.setOrder(1);
return servletListenerRegistrationBean;
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)