Commit a2699ffbec0349036cc899ca8a740939367f35b0

Authored by 王通
1 parent e132a64f

1.

src/main/java/com/bsth/controller/realcontrol/AdminUtilsController.java
... ... @@ -347,7 +347,6 @@ public class AdminUtilsController {
347 347 gatewayHttpLoader.afterPropertiesSet();
348 348 gatewayHttpUtils.afterPropertiesSet();
349 349 rfidHttpLoader.afterPropertiesSet();
350   - ssoConfig.afterPropertiesSet();
351 350  
352 351 return "success";
353 352 } catch (Exception e) {
... ... @@ -366,7 +365,6 @@ public class AdminUtilsController {
366 365 gatewayHttpLoader.afterPropertiesSet();
367 366 gatewayHttpUtils.afterPropertiesSet();
368 367 rfidHttpLoader.afterPropertiesSet();
369   - ssoConfig.afterPropertiesSet();
370 368  
371 369 return "success";
372 370 } catch (Exception e) {
... ...
src/main/java/com/bsth/controller/sys/UserController.java
... ... @@ -76,37 +76,38 @@ public class UserController extends BaseController<SysUser, Integer> {
76 76 public static Map<String, Long> USER_LOCKTIME = new HashMap<>();
77 77  
78 78 @RequestMapping(value = "/login/token")
79   - public void login(@RequestParam String token, @RequestParam String account, @RequestParam Long time, HttpServletRequest request, HttpServletResponse response) throws Exception {
  79 + public void login(@RequestParam String token, HttpServletRequest request, HttpServletResponse response) throws Exception {
80 80 response.addHeader("Content-Type", "text/html;charset=UTF-8");
81 81 if (!ssoConfig.isSsoEnabled()) {
82 82 response.getWriter().write("系统未开启统一登录配置,请联系管理员");
83 83 return;
84 84 }
85   - if (token == null || account == null || time == null) {
  85 + if (token == null) {
86 86 throw new IllegalArgumentException("请检查参数");
87 87 }
88 88  
89 89 Map<String, Object> param = new HashMap<>(), user = new HashMap<>();
90 90 param.put("token", token);
91   - param.put("systemCode", ssoConfig.getSystemCode());
92   - StringBuilder sb = HttpClientUtils.post(ssoConfig.getSsoAuthUrl(), mapper.writeValueAsString(param));
  91 + param.put("sysCode", ssoConfig.getSystemCode());
  92 + StringBuilder sb = HttpClientUtils.post(ssoConfig.getSsoAuthUrl(), HttpClientUtils.createFormEntity(param), HttpClientUtils.createFormHeader());
93 93  
94 94 Assert.notNull(sb, "统一登录平台验证数据不为空");
95 95 logger.info(String.format("统一登录平台:%s", sb.toString()));
96   - param = mapper.readValue(mapper.writeValueAsString(mapper.readValue(sb.toString(), Map.class).get("data")), Map.class);
97   - String jobCode = (String) param.get("account"), realName = (String) param.get("userName");
98   - if (!account.equals(jobCode)) {
99   - response.getWriter().write("token与用户不匹配");
100   - return;
101   - }
102   -
103   - if (jobCode == null || realName == null) {
104   - response.getWriter().write("token数据异常");
  96 + param = mapper.readValue(sb.toString(), Map.class);
  97 + if (200 == (int) param.get("code")) {
  98 + param = mapper.readValue(mapper.writeValueAsString(param.get("data")), Map.class);
  99 + if ("9999".equals(param.get("code")) || "9998".equals(param.get("code"))) {
  100 + response.getWriter().write(param.get("msg").toString());
  101 + return;
  102 + } else {
  103 + param = mapper.readValue(mapper.writeValueAsString(param.get("data")), Map.class);
  104 + }
  105 + } else {
  106 + response.getWriter().write(param.get("msg").toString());
105 107 return;
106 108 }
107   -
108   - user.put("jobCode_eq", jobCode);
109   - user.put("realName_eq", realName);
  109 + String userName = (String) param.get("userName");
  110 + user.put("userName_eq", userName);
110 111 user.put("enabled", true);
111 112  
112 113 Iterator<SysUser> userIterator = sysUserService.list(user).iterator();
... ... @@ -124,7 +125,7 @@ public class UserController extends BaseController&lt;SysUser, Integer&gt; {
124 125 //session里写入用户名,webSocket连接时标识身份用
125 126 session.setAttribute(Constants.SSO_TOKEN, token);
126 127 session.setAttribute(Constants.SESSION_USERNAME, sysUser.getUserName());
127   - session.setAttribute(Constants.RESOURCE_AUTHORITYS, sysUser.getLinks());
  128 + //session.setAttribute(Constants.RESOURCE_AUTHORITYS, sysUser.getLinks());
128 129 //获取公司权限数据
129 130 List<CompanyAuthority> cmyAuths = companyAuthorityService.findByUser(sysUser);
130 131 session.setAttribute(Constants.COMPANY_AUTHORITYS, cmyAuths);
... ... @@ -186,8 +187,19 @@ public class UserController extends BaseController&lt;SysUser, Integer&gt; {
186 187  
187 188 // 校验密码
188 189 boolean matchStatus = new BCryptPasswordEncoder(4).matches(password, user.getPassword());
189   - if (!matchStatus) {
190   - userOrPasswordInvalid(rs, userName);
  190 + if (null == user || !matchStatus) {
  191 + rs.put("msg", "密码有误");
  192 +
  193 + Integer errTimes = USER_ERRTIMES.get(userName);
  194 + if (null == errTimes) {
  195 + errTimes = 0;
  196 + }
  197 + USER_ERRTIMES.put(userName, ++errTimes);
  198 + if (errTimes > 3) {
  199 + USER_LOCKTIME.put(userName, System.currentTimeMillis() + 600000);
  200 + USER_ERRTIMES.put(userName, 0);
  201 + put(rs, "msg", "密码错误4次,账户将被锁定10分钟");
  202 + }
191 203  
192 204 return rs;
193 205 }
... ... @@ -222,7 +234,7 @@ public class UserController extends BaseController&lt;SysUser, Integer&gt; {
222 234 sysUserService.recordLoginDate(userName);
223 235 //session里写入用户名,webSocket连接时标识身份用
224 236 session.setAttribute(Constants.SESSION_USERNAME, user.getUserName());
225   - session.setAttribute(Constants.RESOURCE_AUTHORITYS, user.getLinks());
  237 + //session.setAttribute(Constants.RESOURCE_AUTHORITYS, user.getLinks());
226 238  
227 239 //获取公司权限数据
228 240 List<CompanyAuthority> cmyAuths = companyAuthorityService.findByUser(user);
... ...
src/main/java/com/bsth/security/SsoConfig.java
... ... @@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
11 11 * @author Hill
12 12 */
13 13 @Component
14   -public class SsoConfig implements InitializingBean {
  14 +public class SsoConfig {
15 15  
16 16 /**
17 17 * 是否开启sso登录
... ... @@ -57,6 +57,7 @@ public class SsoConfig implements InitializingBean {
57 57 return systemCode;
58 58 }
59 59  
  60 + @Value("${sso.systemcode}")
60 61 public void setSystemCode(String systemCode) {
61 62 this.systemCode = systemCode;
62 63 }
... ... @@ -86,13 +87,8 @@ public class SsoConfig implements InitializingBean {
86 87 return ssoAuthUrl;
87 88 }
88 89  
  90 + @Value("${sso.http.url.auth}")
89 91 public void setSsoAuthUrl(String ssoAuthUrl) {
90 92 this.ssoAuthUrl = ssoAuthUrl;
91 93 }
92   -
93   - @Override
94   - public void afterPropertiesSet() throws Exception {
95   - setSystemCode(SystemParamCache.getSsoSystemCode());
96   - setSsoAuthUrl(SystemParamCache.getUrlHttpSsoAuth());
97   - }
98 94 }
... ...
src/main/java/com/bsth/security/handler/CustomLogoutSuccessHandler.java
... ... @@ -43,7 +43,7 @@ public class CustomLogoutSuccessHandler implements LogoutSuccessHandler {
43 43 param.put("Authorization", String.format("Bearer %s", token));
44 44 try {
45 45 request.getSession().invalidate();
46   - StringBuilder sb = HttpClientUtils.post(ssoLogoutUrl, null, param);
  46 + StringBuilder sb = HttpClientUtils.post(ssoLogoutUrl, HttpClientUtils.createFormEntity(new HashMap<>()), param);
47 47 log.error(String.format("注销token:%s,返回结果:%s", token, sb.toString()));
48 48 } catch (Exception e) {
49 49 log.error("注销token异常", e);
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -6515,7 +6515,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
6515 6515 Map<String, Object> res = new HashMap<>();
6516 6516 res.put("status", ResponseCode.SUCCESS);
6517 6517 try {
6518   - StringBuilder sb = HttpClientUtils.post(url, null);
  6518 + StringBuilder sb = HttpClientUtils.post(url, HttpClientUtils.createFormEntity(new HashMap<>()));
6519 6519 if (sb != null) {
6520 6520 Map<String, Object> response = new ObjectMapper().readValue(sb.toString(), Map.class);
6521 6521 if (!"报修成功".equals(response.get("msg"))) {
... ...
src/main/java/com/bsth/util/HttpClientUtils.java
1 1 package com.bsth.util;
2 2  
  3 +import com.fasterxml.jackson.core.JsonProcessingException;
  4 +import com.fasterxml.jackson.databind.ObjectMapper;
3 5 import org.apache.http.HttpEntity;
  6 +import org.apache.http.NameValuePair;
4 7 import org.apache.http.client.config.RequestConfig;
5 8 import org.apache.http.client.entity.EntityBuilder;
  9 +import org.apache.http.client.entity.UrlEncodedFormEntity;
6 10 import org.apache.http.client.methods.CloseableHttpResponse;
7 11 import org.apache.http.client.methods.HttpGet;
8 12 import org.apache.http.client.methods.HttpPost;
... ... @@ -10,6 +14,7 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
10 14 import org.apache.http.entity.StringEntity;
11 15 import org.apache.http.impl.client.CloseableHttpClient;
12 16 import org.apache.http.impl.client.HttpClients;
  17 +import org.apache.http.message.BasicNameValuePair;
13 18 import org.slf4j.Logger;
14 19 import org.slf4j.LoggerFactory;
15 20  
... ... @@ -17,9 +22,12 @@ import javax.net.ssl.*;
17 22 import java.io.BufferedReader;
18 23 import java.io.IOException;
19 24 import java.io.InputStreamReader;
  25 +import java.io.UnsupportedEncodingException;
20 26 import java.security.cert.CertificateException;
21 27 import java.security.cert.X509Certificate;
  28 +import java.util.ArrayList;
22 29 import java.util.HashMap;
  30 +import java.util.List;
23 31 import java.util.Map;
24 32  
25 33 /**
... ... @@ -29,6 +37,8 @@ public class HttpClientUtils {
29 37  
30 38 static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);
31 39  
  40 + private static ObjectMapper mapper = new ObjectMapper();
  41 +
32 42 private final static String HTTPS = "https://";
33 43  
34 44 private static SSLConnectionSocketFactory sslConnectionSocketFactory;
... ... @@ -146,6 +156,68 @@ public class HttpClientUtils {
146 156 return stringBuffer;
147 157 }
148 158  
  159 + public static StringBuilder post(String url, HttpEntity entity) throws Exception {
  160 + return post(url, entity, new HashMap<>());
  161 + }
  162 +
  163 + public static StringBuilder post(String url, HttpEntity entity, Map<String, Object> headers) throws Exception {
  164 + CloseableHttpClient httpClient = null;
  165 + CloseableHttpResponse response = null;
  166 + StringBuilder stringBuffer = null;
  167 + try {
  168 + httpClient = defaultHttpClient(url);
  169 + HttpPost post = new HttpPost(url);
  170 +
  171 + post.setHeader("Accept", "application/json");
  172 + post.setHeader("Content-Type", "application/json;charset=UTF-8");
  173 + if (headers.size() > 0) {
  174 + for (Map.Entry<String, Object> header : headers.entrySet()) {
  175 + post.setHeader(header.getKey(), String.valueOf(header.getValue()));
  176 + }
  177 + }
  178 + //超时时间
  179 + RequestConfig requestConfig = RequestConfig.custom()
  180 + .setConnectTimeout(5000).setConnectionRequestTimeout(5000)
  181 + .setSocketTimeout(5000).build();
  182 + post.setConfig(requestConfig);
  183 + if (entity != null) {
  184 + post.setEntity(entity);
  185 + }
  186 +
  187 + response = httpClient.execute(post);
  188 + stringBuffer = getResult(response.getEntity());
  189 + } catch (Exception e) {
  190 + logger.error("", e);
  191 + } finally {
  192 + if (null != httpClient)
  193 + httpClient.close();
  194 + if (null != response)
  195 + response.close();
  196 + }
  197 + return stringBuffer;
  198 + }
  199 +
  200 + public static StringEntity createJsonEntity(Object data) throws JsonProcessingException, UnsupportedEncodingException {
  201 + return new StringEntity(mapper.writeValueAsString(data));
  202 + }
  203 +
  204 + public static UrlEncodedFormEntity createFormEntity(Map<String, Object> data) throws UnsupportedEncodingException {
  205 + List<NameValuePair> pairs = new ArrayList<>();
  206 + for (Map.Entry<String, Object> entry : data.entrySet()) {
  207 + pairs.add(new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue())));
  208 + }
  209 +
  210 + return new UrlEncodedFormEntity(pairs);
  211 + }
  212 +
  213 + public static Map<String, Object> createFormHeader() throws UnsupportedEncodingException {
  214 + Map<String, Object> headers = new HashMap<>();
  215 + headers.put("Accept", "*/*");
  216 + headers.put("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
  217 +
  218 + return headers;
  219 + }
  220 +
149 221 private static StringBuilder getResult(HttpEntity entity) throws IOException {
150 222 StringBuilder stringBuffer = null;
151 223 if (null != entity) {
... ...
src/main/resources/application-cloud.properties
... ... @@ -41,7 +41,7 @@ spring.kafka.consumer.group-id= schedule-system
41 41 spring.kafka.consumer.auto-offset-reset= latest
42 42  
43 43 sso.enabled= true
44   -sso.systemcode = SYS0023
45   -sso.http.url.login= http://47.92.212.107:9102/portal/index.html#/login
46   -sso.http.url.logout= http://47.92.212.107:9102/information/api/v1/logout
47   -sso.http.url.auth= http://47.92.212.107:9102/information/authenticate/authorityAuthentication
48 44 \ No newline at end of file
  45 +sso.systemcode = SYSUS0023
  46 +sso.http.url.login= http://47.92.212.107:9102/login?redirect=%2Findex
  47 +sso.http.url.logout= http://47.92.212.107:9102/login?redirect=%2Findex
  48 +sso.http.url.auth= http://47.92.212.107:9102/prod-api/system/utilitySystem/checkToken
49 49 \ No newline at end of file
... ...
src/main/resources/application-test.properties
... ... @@ -38,8 +38,8 @@ spring.kafka.consumer.auto-offset-reset= latest
38 38 spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
39 39 spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer
40 40  
41   -sso.enabled= false
42   -sso.systemcode = SYS0023
43   -sso.http.url.login= https://127.0.0.1/portal/index.html#/login
44   -sso.http.url.logout= https://127.0.0.1/information/api/v1/logout
45   -sso.http.url.auth= https://127.0.0.1/information/authenticate/authorityAuthentication
46 41 \ No newline at end of file
  42 +sso.enabled= true
  43 +sso.systemcode = SYSUS0023
  44 +sso.http.url.login= http://47.92.212.107:9102/login?redirect=%2Findex
  45 +sso.http.url.logout= http://47.92.212.107:9102/login?redirect=%2Findex
  46 +sso.http.url.auth= http://47.92.212.107:9102/prod-api/system/utilitySystem/checkToken
47 47 \ No newline at end of file
... ...
src/main/resources/application.properties
1   -spring.profiles.active = cloud
  1 +spring.profiles.active = test
2 2  
3 3 spring.view.suffix=.html
4 4 server.session-timeout=-1
... ...