基于SSM的单点登陆02

时间:2022-02-23 08:10:29

基于SSM的单点登陆02

pom文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <groupId>io.guangsoft</groupId>
 7         <artifactId>market</artifactId>
 8         <version>1.0</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>market-utils</artifactId>
13     <packaging>jar</packaging>
14 
15     <!-- 完成真正的jar包注入 -->
16     <dependencies>
17         <!-- Apache工具组件 -->
18         <dependency>
19             <groupId>commons-net</groupId>
20             <artifactId>commons-net</artifactId>
21         </dependency>
22         <!-- Json处理工具包 -->
23         <dependency>
24             <groupId>com.fasterxml.jackson.core</groupId>
25             <artifactId>jackson-databind</artifactId>
26         </dependency>
27         <dependency>
28             <groupId>com.alibaba</groupId>
29             <artifactId>fastjson</artifactId>
30         </dependency>
31         <!-- httpclient -->
32         <dependency>
33             <groupId>org.apache.httpcomponents</groupId>
34             <artifactId>httpclient</artifactId>
35         </dependency>
36         <!-- Servet api -->
37         <dependency>
38             <groupId>javax.servlet</groupId>
39             <artifactId>javax.servlet-api</artifactId>
40             <scope>provided</scope>
41         </dependency>
42     </dependencies>
43 
44 </project>

GResult.java

 1 package io.guangsoft.market.util.bean;  2 
 3 public class GResult {  4 
 5     //状态码
 6     private Integer gCode;  7 
 8     //状态信息
 9     private String gMsg; 10 
11     //响应数据
12     private Object gData; 13 
14     public GResult() { 15  } 16 
17     public GResult(Integer gCode, String gMsg) { 18         this.gCode = gCode; 19         this.gMsg = gMsg; 20  } 21 
22     public GResult(Integer gCode, String gMsg, Object gData) { 23         this.gCode = gCode; 24         this.gMsg = gMsg; 25         this.gData = gData; 26  } 27 
28     public Integer getgCode() { 29         return gCode; 30  } 31 
32     public void setgCode(Integer gCode) { 33         this.gCode = gCode; 34  } 35 
36     public String getgMsg() { 37         return gMsg; 38  } 39 
40     public void setgMsg(String gMsg) { 41         this.gMsg = gMsg; 42  } 43 
44     public Object getgData() { 45         return gData; 46  } 47 
48     public void setgData(Object gData) { 49         this.gData = gData; 50  } 51 
52 }

GResultUtil.java

 1 package io.guangsoft.market.util.utils;  2 
 3 import com.alibaba.fastjson.JSONObject;  4 import io.guangsoft.market.util.bean.GResult;  5 
 6 import java.beans.BeanInfo;  7 import java.beans.Introspector;  8 import java.beans.PropertyDescriptor;  9 import java.lang.reflect.Method; 10 import java.util.HashMap; 11 import java.util.Map; 12 
13 public class GResultUtil { 14 
15     public static GResult success() { 16         return new GResult(0, "操作成功!"); 17  } 18 
19     public static GResult fail() { 20         return new GResult(1, "操作失败!"); 21  } 22 
23     public static GResult fail(Integer gCode) { 24         return new GResult(gCode, "操作失败!"); 25  } 26 
27     public static GResult fail(Integer gCode, String gMsg) { 28         return new GResult(gCode, gMsg); 29  } 30 
31     public static GResult build(Integer gCode, String gMsg, Object gData) { 32         return new GResult(gCode, gMsg, gData); 33  } 34 
35     /**
36  * 得到JSON格式的结果集 37      */
38     public static JSONObject toJSONResult(GResult gResult) { 39         Map gResultMap = transBean2Map(gResult); 40         return new JSONObject(gResultMap); 41  } 42 
43     /**
44  * 使用内省方式将bean转成map 45      */
46     public static Map<String, Object> transBean2Map(Object obj) { 47         if(obj == null){ 48             return null; 49  } 50         Map<String, Object> map = new HashMap<String, Object>(); 51         try { 52             BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); 53             PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); 54             for (PropertyDescriptor property : propertyDescriptors) { 55                 String key = property.getName(); 56                 // 过滤class属性
57                 if (!key.equals("class")) { 58                     // 得到property对应的getter方法
59                     Method getter = property.getReadMethod(); 60                     Object value = getter.invoke(obj); 61  map.put(key, value); 62  } 63  } 64         } catch (Exception e) { 65  e.printStackTrace(); 66  } 67         return map; 68  } 69 }

CookieUtil.java

 1 package io.guangsoft.market.util.utils;  2 
 3 
 4 import java.net.URLDecoder;  5 import java.net.URLEncoder;  6 
 7 import javax.servlet.http.Cookie;  8 import javax.servlet.http.HttpServletRequest;  9 import javax.servlet.http.HttpServletResponse;  10 
 11 public class CookieUtil {  12 
 13     /**
 14  * 得到Cookie的值, 不编码  15      */
 16     public static String getCookieValue(HttpServletRequest request, String cookieName) {  17         return getCookieValue(request, cookieName, false);  18  }  19 
 20     /**
 21  * 得到Cookie的值,  22      */
 23     public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {  24         Cookie[] cookieList = request.getCookies();  25         if (cookieList == null || cookieName == null) {  26             return null;  27  }  28         String retValue = null;  29         try {  30             for (int i = 0; i < cookieList.length; i++) {  31                 if (cookieList[i].getName().equals(cookieName)) {  32                     if (isDecoder) {  33                         retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");  34                     } else {  35                         retValue = cookieList[i].getValue();  36  }  37                     break;  38  }  39  }  40         } catch (Exception e) {  41  e.printStackTrace();  42  }  43         return retValue;  44  }  45 
 46     /**
 47  * 得到Cookie的值,  48      */
 49     public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {  50         Cookie[] cookieList = request.getCookies();  51         if (cookieList == null || cookieName == null) {  52             return null;  53  }  54         String retValue = null;  55         try {  56             for (int i = 0; i < cookieList.length; i++) {  57                 if (cookieList[i].getName().equals(cookieName)) {  58                     retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);  59                     break;  60  }  61  }  62         } catch (Exception e) {  63  e.printStackTrace();  64  }  65         return retValue;  66  }  67 
 68     /**
 69  * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码  70      */
 71     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,  72  String cookieValue) {  73         setCookie(request, response, cookieName, cookieValue, -1);  74  }  75 
 76     /**
 77  * 设置Cookie的值 在指定时间内生效,但不编码  78      */
 79     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,  80                                  String cookieValue, int cookieMaxage) {  81         setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);  82  }  83 
 84     /**
 85  * 设置Cookie的值 不设置生效时间,但编码  86      */
 87     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,  88                                  String cookieValue, boolean isEncode) {  89         setCookie(request, response, cookieName, cookieValue, -1, isEncode);  90  }  91 
 92     /**
 93  * 设置Cookie的值 在指定时间内生效, 编码参数  94      */
 95     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,  96                                  String cookieValue, int cookieMaxage, boolean isEncode) {  97  doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);  98  }  99 
100     /**
101  * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码) 102      */
103     public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName, 104                                  String cookieValue, int cookieMaxage, String encodeString) { 105  doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString); 106  } 107 
108     /**
109  * 删除Cookie带cookie域名 110      */
111     public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, 112  String cookieName) { 113         doSetCookie(request, response, cookieName, "", -1, false); 114  } 115 
116     /**
117  * 设置Cookie的值,并使其在指定时间内生效 118  * 119  * @param cookieMaxage cookie生效的最大秒数 120      */
121     private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, 122                                           String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) { 123         try { 124             if (cookieValue == null) { 125                 cookieValue = ""; 126             } else if (isEncode) { 127                 cookieValue = URLEncoder.encode(cookieValue, "utf-8"); 128  } 129             Cookie cookie = new Cookie(cookieName, cookieValue); 130             if (cookieMaxage > 0) { 131  cookie.setMaxAge(cookieMaxage); 132  } 133             if (null != request) {// 设置域名的cookie
134                 String domainName = getDomainName(request); 135  System.out.println(domainName); 136                 if (!"localhost".equals(domainName) && !"127.0.0.1".equals(domainName)) { 137  cookie.setDomain(domainName); 138  } 139  } 140             cookie.setPath("/"); 141  response.addCookie(cookie); 142         } catch (Exception e) { 143  e.printStackTrace(); 144  } 145  } 146 
147     /**
148  * 设置Cookie的值,并使其在指定时间内生效 149  * @param cookieMaxage cookie生效的最大秒数 150      */
151     private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response, 152                                           String cookieName, String cookieValue, int cookieMaxage, String encodeString) { 153         try { 154             if (cookieValue == null) { 155                 cookieValue = ""; 156             } else { 157                 cookieValue = URLEncoder.encode(cookieValue, encodeString); 158  } 159             Cookie cookie = new Cookie(cookieName, cookieValue); 160             if (cookieMaxage > 0) { 161  cookie.setMaxAge(cookieMaxage); 162  } 163             if (null != request) {// 设置域名的cookie
164                 String domainName = getDomainName(request); 165  System.out.println(domainName); 166                 if (!"localhost".equals(domainName)) { 167  cookie.setDomain(domainName); 168  } 169  } 170             cookie.setPath("/"); 171  response.addCookie(cookie); 172         } catch (Exception e) { 173  e.printStackTrace(); 174  } 175  } 176 
177     /**
178  * 得到cookie的域名 179      */
180     private static final String getDomainName(HttpServletRequest request) { 181         String domainName = null; 182         String serverName = request.getRequestURL().toString(); 183         if (serverName == null || serverName.equals("")) { 184             domainName = ""; 185         } else { 186             //http://www.baidu.com/aaa
187             //www.baidu.com.cn/aaa/bb/ccc
188             serverName = serverName.toLowerCase(); 189             serverName = serverName.substring(7); 190             final int end = serverName.indexOf("/"); 191             serverName = serverName.substring(0, end); 192             final String[] domains = serverName.split("\\."); 193             int len = domains.length; 194             if (len > 3) { 195                 // www.xxx.com.cn
196                 domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1]; 197             } else if (len <= 3 && len > 1) { 198                 // xxx.com or xxx.cn
199                 domainName = "." + domains[len - 2] + "." + domains[len - 1]; 200             } else { 201                 domainName = serverName; 202  } 203  } 204         if (domainName != null && domainName.indexOf(":") > 0) { 205             String[] ary = domainName.split("\\:"); 206             domainName = ary[0]; 207  } 208         return domainName; 209  } 210 }

HttpClientUtil.java

 1 package io.guangsoft.market.util.utils;  2 
 3 import java.io.IOException;  4 import java.io.InterruptedIOException;  5 import java.net.URI;  6 import java.net.UnknownHostException;  7 import java.util.ArrayList;  8 import java.util.List;  9 import java.util.Map.Entry;  10 
 11 import javax.net.ssl.SSLException;  12 import javax.net.ssl.SSLHandshakeException;  13 
 14 import org.apache.http.Consts;  15 import org.apache.http.HttpEntity;  16 import org.apache.http.HttpEntityEnclosingRequest;  17 import org.apache.http.HttpRequest;  18 import org.apache.http.HttpResponse;  19 import org.apache.http.NameValuePair;  20 import org.apache.http.NoHttpResponseException;  21 import org.apache.http.client.HttpClient;  22 import org.apache.http.client.HttpRequestRetryHandler;  23 import org.apache.http.client.config.RequestConfig;  24 import org.apache.http.client.entity.UrlEncodedFormEntity;  25 import org.apache.http.client.methods.HttpPost;  26 import org.apache.http.client.protocol.HttpClientContext;  27 import org.apache.http.config.Registry;  28 import org.apache.http.config.RegistryBuilder;  29 import org.apache.http.conn.ConnectTimeoutException;  30 import org.apache.http.conn.socket.ConnectionSocketFactory;  31 import org.apache.http.conn.socket.LayeredConnectionSocketFactory;  32 import org.apache.http.conn.socket.PlainConnectionSocketFactory;  33 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;  34 import org.apache.http.impl.client.CloseableHttpClient;  35 import org.apache.http.impl.client.HttpClients;  36 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;  37 import org.apache.http.message.BasicNameValuePair;  38 import org.apache.http.protocol.HttpContext;  39 import org.apache.http.util.EntityUtils;  40 
 41 import com.alibaba.fastjson.JSONObject;  42 
 43 public class HttpClientUtil {  44     
 45     private static CloseableHttpClient httpClient = null;  46     static final int maxTotal = 5000;//最大并发数
 47     static final int defaultMaxPerRoute = 1000;//每路最大并发数
 48     static final int connectionRequestTimeout = 5000;// ms毫秒,从池中获取链接超时时间 
 49     static final int connectTimeout = 5000;// ms毫秒,建立链接超时时间 
 50     static final int socketTimeout = 30000;// ms毫秒,读取超时时间 
 51     
 52     private static CloseableHttpClient initHttpClient() {  53         ConnectionSocketFactory plainFactory = PlainConnectionSocketFactory.getSocketFactory();  54         LayeredConnectionSocketFactory sslFactory = SSLConnectionSocketFactory.getSocketFactory();  55         Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().  56                 register("http", plainFactory).register("https", sslFactory).build();  57         PoolingHttpClientConnectionManager poolManager = new PoolingHttpClientConnectionManager(registry);  58  poolManager.setMaxTotal(maxTotal);  59  poolManager.setDefaultMaxPerRoute(defaultMaxPerRoute);  60         HttpRequestRetryHandler httpRetryHandler = new HttpRequestRetryHandler() {  61  @Override  62             public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {  63                 if(executionCount >= 2) {  64                     return false;  65  }  66                 if(exception instanceof NoHttpResponseException) {  67                     return false;  68  }  69                 if(exception instanceof SSLHandshakeException) {  70                     return false;  71  }  72                 if(exception instanceof InterruptedIOException) {  73                     return false;  74  }  75                 if(exception instanceof UnknownHostException) {  76                     return false;  77  }  78                 if(exception instanceof ConnectTimeoutException) {  79                     return false;  80  }  81                 if(exception instanceof SSLException) {  82                     return false;  83  }  84                 HttpClientContext clientContext = HttpClientContext.adapt(context);  85                 HttpRequest request = clientContext.getRequest();  86                 if(!(request instanceof HttpEntityEnclosingRequest)) {  87                     return true;  88  }  89                 return false;  90  }  91  };  92         RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connectionRequestTimeout).  93  setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout).build();  94         CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(poolManager).setDefaultRequestConfig(requestConfig).  95  setRetryHandler(httpRetryHandler).build();  96         return closeableHttpClient;  97  }  98     
 99     public static CloseableHttpClient getHttpClient() { 100         if(httpClient == null) { 101             synchronized (HttpClientUtil.class) { 102                 if(httpClient == null) { 103                     httpClient = initHttpClient(); 104  } 105  } 106  } 107         return httpClient; 108  } 109     
110     public static JSONObject sendPost(JSONObject requestData) { 111         JSONObject result = new JSONObject(); 112         String url = requestData.getString("url"); 113         JSONObject parameter = requestData.getJSONObject("parameter"); 114         try { 115             HttpClient httpClient = HttpClientUtil.getHttpClient(); 116             HttpPost httpPost = new HttpPost(); 117             httpPost.setURI(new URI(url)); 118             List<NameValuePair> param = new ArrayList<NameValuePair>(); 119             for(Entry<String, Object> entry : parameter.entrySet()) { 120                 param.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString())); 121  } 122             httpPost.setEntity(new UrlEncodedFormEntity(param, Consts.UTF_8)); 123             HttpResponse response = httpClient.execute(httpPost); 124             HttpEntity entity = response.getEntity(); 125             String responseBody = EntityUtils.toString(entity); 126             int code = response.getStatusLine().getStatusCode(); 127             result.put("CODE", code); 128             try { 129                 JSONObject responseJson = JSONObject.parseObject(responseBody); 130                 result.put("DATA", responseJson); 131             } catch(Exception e) { 132                 result.put("DATA", responseBody); 133  } 134  httpPost.abort(); 135  httpPost.releaseConnection(); 136         } catch (Exception e) { 137  e.printStackTrace(); 138  } 139         return result; 140  } 141     
142 }