如图流程清晰,能够去官网了解https://github.com/apereo。css
下面看先后端分离的架构:html
假设公司有多个系统但愿能统一登陆认证一次均可以访问,如订单管理系统(oms),商品管理系统(pms),客户管理系统(crm),例如:用户访问 oms 系统拦截请求发现没有登陆,就跳转到cas server 去登陆,登陆完成后签发一个ST,重定向到oms系统,oms拿着回传的参数ST去CAS验证,验证经过后,容许用户访问资源,若是是先后端分离的应用,系统就由原来的单个应用,分为先后端分开部署(动静分离),前端的静态服务(html,css.js),后端的(api接口),这时候用户端浏览器先访问前端加载静态资源,而后再向后端api发起请求,后端api 接口经过过滤器鉴权。若是cas server 登陆后跳转到后端服务地址确定是不行的,这时候能够在服务端i在完成验证后继续跳转到前端地址,index.jsp:前端
<%@ page import="com.ctrip.framework.apollo.ConfigService" %> <%@ page import="com.ctrip.framework.apollo.Config" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <% //不一样环境前端地址不一样(开发,生产)因此经过配置获取 Config omsConfig = ConfigService.getConfig("oms"); response.sendRedirect(omsConfig.getProperty("web.front.url","")); %> </body> </html>
这样经过继续跳转最终到前端页面。git
须要注意的地方:github
一、先后端分离后须要注意跨域的问题因此要在后端服务响应头设置以下内容:web
httpServletResponse.addHeader("Access-Control-Allow-Origin", acaOrigin);//前端域名(不一样环境不一样能够经过配置读取) httpServletResponse.addHeader("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS"); httpServletResponse.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, *"); httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true");
二、前端访问后端api 地址也要是能够配置的,配置有两种方式,一种在程序构建时注入,一种在程序运行时产生。高性能 Javascript》中有一节说起,“开发高性能应用的一个广泛规则是,只要是能在构建时完成的工做,就不要留到运行时去作”因此前端在编译的时候也须要根据不一样环境变量,设置不一样的后端地址。后端