SpringBoot+Cas整合
导入pom
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.2.0-GA</version>
</dependency>
加入配置信息
cas:
#cas认证中心地址
# server-url-prefix: http://portal.hnust.edu.cn:8442/cas
server-url-prefix: http://192.168.3.100:88/cas
#cas认证中心登录地址
# server-login-url: http://portal.hnust.edu.cn:8442/cas/login
server-login-url: http://192.168.3.100:88/cas/login
#后端服务地址
client-host-url: http://192.168.4.73
#是否使用session
use-session: true
#cas认证类型
validation-type: cas
启动类添加注解
@EnableCasClient
@SpringBootApplication
public class DemoApplication {
******
}
修改配置
重点就在这,
cas用springMVC对接的话就是用过滤器之类的接到请求,校验,失败的话就重定向,跳转到认证登录页面;
但是!这里是前后端分离,如果按照这个方案来,就会跨域(CORS)
所以,重写一下cas的部分方法,取消重定向,而是向前端发送一个特定的状态码,让前端来进行重定向,跳转到cas登录页面
具体步骤如下:
1.重写AuthenticationRedirectStrategy 的redirect方法
public class CustomAuthRedirectStrategy implements AuthenticationRedirectStrategy {
@Override
public void redirect(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) throws IOException {
httpServletResponse.setStatus(402);
}
}
2.让重写的方法发挥作用,在初始化的时候就替换掉原有的方法
注意:
initParameters.put(“authenticationRedirectStrategyClass”, “com.yunqi.cas.CustomAuthRedirectStrategy(此处是你方法的实际位置)”);
@Configuration
public class CasAuthConfig extends CasClientConfigurerAdapter {
@Override
public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
Map<String, String> initParameters = authenticationFilter.getInitParameters();
//当校验失败时重定向改为更改状态码,由前端进行重定向
initParameters.put("authenticationRedirectStrategyClass", "com.yunqi.cas.CustomAuthRedirectStrategy");
}
/* @Override
public void configureValidationFilter(FilterRegistrationBean validationFilter) {
Map<String, String> initParameters = validationFilter.getInitParameters();
initParameters.put("encodeServiceUrl", "false");
}*/
}
3.如果后端接口跨域,可以加入以下配置
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("GET", "POST", "PUT", "DELETE").allowCredentials(true)
.exposedHeaders(HttpHeaders.SET_COOKIE);
}
}
到了这里就完成了一半对接.