基于SSM的单点登陆02

Posted guanghe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于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 }

 

以上是关于基于SSM的单点登陆02的主要内容,如果未能解决你的问题,请参考以下文章

基于SSM的单点登陆05

基于SSM的单点登陆04

Spring Security 解析 —— 基于JWT的单点登陆(SSO)开发及原理解析

认证和SSO-基于OAuth2单点登陆基本架构

ssm拦截器的原理及实现

基于SSM实现宠物领养系统