您好,欢迎访问本站博客! 控制台  查看权限
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 网站所有资源均来自网络,如有侵权请联系站长删除!

SG-UAP3.0开发平台微服务与isc集成方案具体实现

国网 Sena 2018-05-30 1192 次浏览 0个评论

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

 


已有 1192 位网友参与,快来吐槽:

发表评论