Bootstrap

SpringBoot+Cas整合2-1

导入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);
    }
}

到了这里就完成了一半对接.

;