前言
阅读本篇文章需先了解集成CAS基本流程,这里只是记录集成过程中碰到的问题!
以下是本篇文章正文内容,下面案例可供参考
此次笔者在项目中碰到前后端分离环境下集成CAS所遇到的问题,网上很多关于如何集成CAS的配置,这里不在过多赘述。
1.跨域问题
问题描述
CAS拦截前端请求地址跳转到CAS服务端登录页面后会出现跨域问题,根据网上找的跨域解决办法都无效。
解决办法
这里是写一个接口,接口里返回CAS服务端的请求地址,由前端进行跳转才解决的。
@GetMapping("/getCasUrl")
public RestData getCasUrl(HttpServletRequest request) {
if (StringUtils.isNotBlank(loginType)) {
return addRestData("http://localhost:9090/cas/login?service=此处填CAS客户端配置的拦截地址");
} else {
return addRestData();
}
}
2.验证登录问题
问题描述
登录成功后怎么返回项目首页
解决办法
CAS服务端登录成功后会发送请求service参数携带的路径上并带上生成的ST,请求此接口进行验证身份,那么可以加个接口用于CAS校验,校验成功后再由后台重定向到前台页面即可。
@GetMapping("/redirectHome")
public void redirectHome(HttpServletResponse response) throws IOException {
response.sendRedirect("项目首页地址?flag=" + true);
}
3.登录成功获取认证信息
问题描述
此时已经CAS认证成功了,那么前端该怎么拿到用户信息呢。
解决办法
如上图,重定向页面的时候可以返回一个标记给告知前端,前端在页面加载的时候判断是否有这个标记,有的话则请求接口拿到用户信息。
@GetMapping("/loginByCas")
public RestData loginByCas(HttpServletRequest request) {
Object object = request.getSession().getAttribute("_const_cas_assertion_");
if (null == object) {
return null;
}
Assertion assertion = (Assertion) object;
String userName = assertion.getPrincipal().getName();
}
总结
以上就是笔者在前后端分离环境下集成CAS的流程,如有其他办法欢迎留言。 下面两篇集成CAS文章可供参考: CAS服务端和客户端搭建 springboot通过配置文件集成CAS配置
|