1.SG-UAP3.0开发平台微服务架构路线
2.SG-UAP3.0开发平台微服务架构
3.SG-UAP3.0开发平台微服务与isc集成方案
项目组所开发的系统在部署阶段,若没有使用分布式服务总线,前端web工程(IDE生成)需集成isc(通过isc_sso完成前端鉴权),前端登录后请求后端并将用户信息传递过去,后端每个微服务需进行登录会话校验(在后端服务添加过滤器,获取用户信息及资源信息,通过调用isc相应接口进行判断此用户是否授权),后端微服务暴露出的restful请求在isc中进行用户权限配置 ,同样,在服务调用服务的时候,调用方需将用户信息传递给被调用方进行鉴权操作
4.SG-UAP3.0开发平台微服务与isc集成方案具体实现
Ø 前端工程添加所需jar包
Ø 在web.xml中加入统一认证过虑器、获取用户信息GetCurrentUser、系统注销IscLogoutServlet、系统注销监听(红框为原有基础上新增内容,表示具备代理能力)。
Ø 微服务端添加jar包
Ø 注意:isc_sm_agent.jar中的iscservicesadapter.properties文件需要配置isc服务地址及isc_appid
Ø 微服务添加过滤器
@Order(1) @WebFilter(filterName = "MicAuthorizeFilter", urlPatterns = "/*") public class MicAuthorizeFilter extends HttpServlet implements Filter{ @Value("${spring.isc_appId}") private String isc_appId; //isc资源服务接口 private IResourceService ress = (IResourceService) AdapterFactory.getResourceService(); @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length()); if (url.startsWith("/") && url.length() > 1) { url = url.substring(1).split("/")[0]; } String iscUserId = httpRequest.getParameter("cl_u_id"); boolean isPer=false; if(null==httpRequest.getSession(false)){ if(true==httpRequest.getSession(true).isNew()){ System.out.println("session没有过期"); }else{ System.out.println("session已经过期"); String authorizeState = "timeout"; PrintWriter pw = null; try { pw = response.getWriter(); pw.write(authorizeState); } catch (IOException e) { e.printStackTrace(); }finally{ pw.flush(); pw.close(); } return; } } if(null==iscUserId||("").equals(iscUserId)){ System.out.println("没有登录,请联系管理员"); //如果没有登录,将跳转到登录界面 return; } try {//校验此用户是否有访问url的权限 isPer= ress.hasPermitURLObj(iscUserId, isc_appId, url); } catch (Exception e) { e.printStackTrace(); } if (isPer==true){ chain.doFilter(httpRequest, httpResponse); return; }else{ System.out.println("没有权限访问,请联系管理员"); //如果没有权限,将跳转到提示界面 String authorizeState = "authorizeFail"; PrintWriter pw = null; try { pw = response.getWriter(); pw.write(authorizeState); } catch (IOException e) { e.printStackTrace(); }finally{ pw.flush(); pw.close(); } return; } } @Override public void init(FilterConfig arg0) throws ServletException { } }
在application.properties进行配置
spring.isc_appId=402894675c5c3ef8015d3f2bc5aa0684//业务系统id