shuzheng 9 лет назад
Родитель
Сommit
12d07a197d

+ 0 - 150
zheng-upms/zheng-upms-client/src/main/java/com/zheng/upms/client/filter/SSOFilter.java

@@ -1,150 +0,0 @@
-package com.zheng.upms.client.filter;
-
-import com.zheng.common.util.CookieUtil;
-import com.zheng.common.util.RedisUtil;
-import com.zheng.upms.client.util.RequestParameterUtil;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.message.BasicNameValuePair;
-import org.apache.http.util.EntityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import redis.clients.jedis.Jedis;
-
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by shuzheng on 2016/12/10.
- */
-public class SSOFilter implements Filter {
-
-    private final static Logger _log = LoggerFactory.getLogger(SSOFilter.class);
-
-    // 局部会话key
-    private final static String ZHENG_UPMS_CLIENT_SESSION_ID = "zheng-upms-client-session-id";
-    // 单点同一个token所有局部会话key
-    private final static String ZHENG_UPMS_CLIENT_SESSION_IDS = "zheng-upms-client-session-ids";
-    // 局部会话过期时间
-    private final static int TIME_OUT = 30 * 60;
-    private String SYSTEM_NAME = "system_name";
-    private String SSO_SERVER_URL = "sso_server_url";
-    private String SSO_DEBUG = "sso_debug";
-    private FilterConfig filterConfig;
-
-    @Override
-    public void init(FilterConfig filterConfig) throws ServletException {
-        this.filterConfig = filterConfig;
-    }
-
-    @Override
-    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-        HttpServletRequest request = (HttpServletRequest) servletRequest;
-        HttpServletResponse response = (HttpServletResponse) servletResponse;
-
-        // 是否开发模式,为true则直接放行
-        String sso_debug = filterConfig.getInitParameter(SSO_DEBUG);
-        if (null != sso_debug && "true".equals(sso_debug)) {
-            filterChain.doFilter(request, response);
-            return;
-        }
-
-        // 分配子系统登录sessionId,首次获取后缓存到cookie,防止session丢失
-        String clientSessionId = CookieUtil.getCookie(request, ZHENG_UPMS_CLIENT_SESSION_ID);
-        if (StringUtils.isBlank(clientSessionId)) {
-            clientSessionId = request.getSession().getId();
-            CookieUtil.setCookie(response, ZHENG_UPMS_CLIENT_SESSION_ID, clientSessionId);
-        }
-
-        // 判断局部会话是否登录
-        String cacheToken = RedisUtil.get(ZHENG_UPMS_CLIENT_SESSION_ID + "_" + clientSessionId);
-        if (null != clientSessionId && !StringUtils.isBlank(cacheToken)) {
-            // 移除url中的token参数
-            if (null != request.getParameter("token")) {
-                String backUrl = RequestParameterUtil.getParameterWithOutCode(request);
-                response.sendRedirect(backUrl.toString());
-            } else {
-                filterChain.doFilter(request, response);
-            }
-            // 更新token有效期
-            RedisUtil.set(ZHENG_UPMS_CLIENT_SESSION_ID + "_" + clientSessionId, cacheToken, TIME_OUT);
-            Jedis jedis = RedisUtil.getJedis();
-            jedis.expire(ZHENG_UPMS_CLIENT_SESSION_IDS + "_" + cacheToken, TIME_OUT);
-            jedis.close();
-            return;
-        }
-        // 未登录
-        else {
-            // 认证中心地址
-            StringBuffer sso_server_url = new StringBuffer(filterConfig.getInitParameter(SSO_SERVER_URL));
-            // 判断是否有认证中心token
-            String token = request.getParameter("token");
-            // 已拿到token
-            if (!StringUtils.isBlank(token)) {
-                // HttpPost去校验token
-                try {
-                    HttpClient httpclient = new DefaultHttpClient();
-                    HttpPost httpPost = new HttpPost(sso_server_url.toString() + "/sso/token");
-
-                    List<NameValuePair> nvps = new ArrayList<>();
-                    nvps.add(new BasicNameValuePair("token", token));
-                    httpPost.setEntity(new UrlEncodedFormEntity(nvps));
-
-                    HttpResponse httpResponse = httpclient.execute(httpPost);
-                    if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
-                        HttpEntity httpEntity = httpResponse.getEntity();
-                        String result = EntityUtils.toString(httpEntity);
-                        if (result.equals("success")) {
-                            // token校验正确,创建局部会话
-                            RedisUtil.set(ZHENG_UPMS_CLIENT_SESSION_ID + "_" + clientSessionId, token, TIME_OUT);
-                            // 保存token对应的局部会话sessionId,方便退出操作
-                            Jedis jedis = RedisUtil.getJedis();
-                            jedis.sadd(ZHENG_UPMS_CLIENT_SESSION_IDS + "_" + token, clientSessionId);
-                            jedis.expire(ZHENG_UPMS_CLIENT_SESSION_IDS + "_" + token, TIME_OUT);
-                            jedis.close();
-                            _log.debug("当前token={},对应的注册系统个数:{}个", token, RedisUtil.getJedis().scard(ZHENG_UPMS_CLIENT_SESSION_IDS + "_" + token));
-                            // 移除url中的token参数
-                            String backUrl = RequestParameterUtil.getParameterWithOutCode(request);
-                            // 返回请求资源
-                            response.sendRedirect(backUrl.toString());
-                            return;
-                        }
-                    }
-                } catch (IOException e) {
-                    _log.error("验证token失败:", e);
-                }
-                // 跳转认证中心登录页
-            }
-            // 无token,跳转sso-server认证中心登录,并带上回调地址和系统名称参数
-            sso_server_url.append("/sso/index").append("?").append(SYSTEM_NAME).append("=").append(filterConfig.getInitParameter(SYSTEM_NAME));
-            StringBuffer backurl = request.getRequestURL();
-            String queryString = request.getQueryString();
-            if (!StringUtils.isBlank(queryString)) {
-                backurl.append("?").append(queryString);
-            }
-            sso_server_url.append("&").append("backurl").append("=").append(URLEncoder.encode(backurl.toString(), "utf-8"));
-
-            _log.debug("未登录,跳转认证中心:{}", sso_server_url);
-            response.sendRedirect(sso_server_url.toString());
-        }
-
-    }
-
-    @Override
-    public void destroy() {
-
-    }
-
-}