From 5b7a3e1c8f574ed28ffee696f88786d5b770084f Mon Sep 17 00:00:00 2001 From: du <1725534722@qq.com> Date: Thu, 26 Sep 2024 19:08:36 +0800 Subject: [PATCH] bugfix --- .../pt/controller/AEventsController.java | 33 +++- .../main/java/com/ruoyi/pt/entity/Events.java | 4 +- .../com/ruoyi/pt/mapper/AEventsMapper.java | 1 + .../pt/service/impl/AEventsServiceImpl.java | 118 +++++++------- .../src/main/resources/application.yml | 2 +- .../resources/mapper/pt/AEventsMapper.xml | 40 +++-- .../java/com/ruoyi/common/utils/RsaUtils.java | 153 ++++++++++++++++++ .../framework/config/SecurityConfig.java | 3 +- .../web/service/SysLoginService.java | 100 ++++++++++++ 9 files changed, 385 insertions(+), 69 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/RsaUtils.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pt/controller/AEventsController.java b/ruoyi-admin/src/main/java/com/ruoyi/pt/controller/AEventsController.java index 70f81b7..ba691f7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pt/controller/AEventsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pt/controller/AEventsController.java @@ -1,10 +1,13 @@ package com.ruoyi.pt.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.pt.entity.CaseInfo; import com.ruoyi.pt.entity.CasesImport; import com.ruoyi.pt.entity.Events; @@ -38,6 +41,35 @@ public class AEventsController extends BaseController { @Resource private EventsService eventsService; + @Resource + private SysLoginService sysLoginService; + /** + * 登录获取token + */ + @PostMapping("/login") + @ApiOperation(value = "登录获取token") + public AjaxResult login(@RequestBody LoginBody loginBody) { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = sysLoginService.login1(loginBody.getUsername(), loginBody.getPassword()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** + * app登录获取token + */ + @PostMapping("/appLogin") + @ApiOperation(value = "app登录获取token") + public AjaxResult appLogin(@RequestBody LoginBody loginBody) { + AjaxResult ajax = AjaxResult.success(); + // 生成令牌 + String token = sysLoginService.login2(loginBody.getUsername(), loginBody.getPassword()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** * 取最新一条事件(预警钟) */ @@ -57,7 +89,6 @@ public class AEventsController extends BaseController { } - /** * 获取日志错误信息 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pt/entity/Events.java b/ruoyi-admin/src/main/java/com/ruoyi/pt/entity/Events.java index e39615e..119cba2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pt/entity/Events.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pt/entity/Events.java @@ -73,7 +73,7 @@ public class Events implements Serializable { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @TableField(value = "firstWarnTime") - private Date firstWarnTime; + private Date firstWarnTimeDate; /** * 事件发生时间 @@ -82,7 +82,7 @@ public class Events implements Serializable { @TableField(value = "eventTime") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date eventTime; + private Date eventTimeDate; /** * 预警因素 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pt/mapper/AEventsMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/pt/mapper/AEventsMapper.java index 3854972..e254cf3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pt/mapper/AEventsMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pt/mapper/AEventsMapper.java @@ -70,6 +70,7 @@ public interface AEventsMapper { * casesImport表提级或退回 */ int updateCasesImport(@Param("list") List list, + @Param("isReport") Integer isReport, @Param("time") String time); /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/pt/service/impl/AEventsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/pt/service/impl/AEventsServiceImpl.java index 38e3afe..9e163be 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/pt/service/impl/AEventsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/pt/service/impl/AEventsServiceImpl.java @@ -28,11 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 群体事件业务处理层 @@ -44,6 +40,7 @@ import java.util.Map; public class AEventsServiceImpl implements AEventsService { public static final Logger log = LoggerFactory.getLogger(AEventsServiceImpl.class); + public static final ArrayList OBJECTS = new ArrayList<>(); @Resource private RedisCache redisCache; @@ -114,16 +111,26 @@ public class AEventsServiceImpl implements AEventsService { @Transactional(rollbackFor = Exception.class) public void eventChangeIsReport(AEventChangeIsReport events) { events.setAuditTime(DateUtil.date()); - //如果工单编号数组不为0,则将其所有工单进行标记 + //获取当前innerEventId对应的事件 + Events be = aEventsMapper.getByInnerEventId(events.getInnerEventId()); + String str = be.getRelationNums().replaceAll("[\\[\\]']", ""); + //当前innerEventId对应的事件对应的工单 + List sp = Arrays.asList(str.split(",\\s*")); + List ol = new ArrayList<>(sp); // 可变集合 + //如果工单编号数组不为0,则将其工单进行标记 if (events.getCaseSerial() != null && !events.getCaseSerial().isEmpty()) { - aEventsMapper.updateCasesImport(events.getCaseSerial(), DateUtil.now()); + aEventsMapper.updateCasesImport(events.getCaseSerial(), 1, DateUtil.now()); + ol.removeAll(events.getCaseSerial()); + } else { + //如果不更改 都更改审批时间 + aEventsMapper.updateCasesImport(ol, null, DateUtil.now()); } aEventsMapper.updateEvent(events); if (events.getIsReport() == 1) { Events a1 = aEventsMapper.getByInnerEventId(events.getInnerEventId()); StringBuilder sb = new StringBuilder().append("["); int count = 1; - for (String x : events.getCaseSerial()) { + for (String x : ol) { sb.append("'"); sb.append(x); sb.append("'"); @@ -136,53 +143,56 @@ public class AEventsServiceImpl implements AEventsService { a1.setRelationNums(sb.toString()); String substring = a1.getInnerEventId().substring(0, 6); a1.setInnerEventId(substring + IdUtil.randomUUID()); - aEventsMapper.addAudit(a1); - // 重新上报驾驶舱 - RemoteCallsDTO dto = BeanUtil.copyProperties(a1, RemoteCallsDTO.class); - dto.setContent(dto.getTitle()); - // 创建SimpleDateFormat对象,指定日期格式为yyyy-MM-dd HH:mm:ss - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // 使用SimpleDateFormat对象将Date对象格式化为字符串 - String firstWarnTime = sdf.format(dto.getFirstWarnTimeDate()); - String eventTime = sdf.format(dto.getEventTimeDate()); - dto.setFirstWarnTime(firstWarnTime); - dto.setEventTime(firstWarnTime); - dto.setLastWarnTime(eventTime); - // 获取relationNums转成数组 - JSONArray jsonArray = JSONUtil.parseArray(dto.getRelationNums()); - List list = jsonArray.toList(String.class); - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("CASE_SERIAL", list.get(0)); - CasesImport casesImport = casesImportService.getOne(wrapper); - if (BeanUtil.isNotEmpty(casesImport)) { - // 如果是紧急事件content使用原始工单的content - if ("3".equals(dto.getScenceType())) { - dto.setContent(casesImport.getCaseContent()); - } else { - dto.setContent(dto.getTitle()); - } - // 如果类型是同人事件,上报⼈姓名和电话不取原始工单,直接从预警因素字段取,顿号分隔。 - if ("2".equals(dto.getScenceType())) { - String warnFactor = dto.getWarnFactor(); - String[] split = warnFactor.split("、"); - if (split.length == 2) { - dto.setEventCreatorTel(split[0]); - dto.setEventCreator(split[1]); + + if (!ol.isEmpty()) { + aEventsMapper.addAudit(a1); + // 重新上报驾驶舱 todo al.getRelationNums() 需要符合的工单id + RemoteCallsDTO dto = BeanUtil.copyProperties(a1, RemoteCallsDTO.class); + dto.setContent(dto.getTitle()); + // 创建SimpleDateFormat对象,指定日期格式为yyyy-MM-dd HH:mm:ss + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 使用SimpleDateFormat对象将Date对象格式化为字符串 + String firstWarnTime = sdf.format(dto.getFirstWarnTimeDate()); + String eventTime = sdf.format(dto.getEventTimeDate()); + dto.setFirstWarnTime(firstWarnTime); + dto.setEventTime(firstWarnTime); + dto.setLastWarnTime(eventTime); + // 获取relationNums转成数组 +// JSONArray jsonArray = JSONUtil.parseArray(dto.getRelationNums()); +// List list = jsonArray.toList(String.class); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("CASE_SERIAL", ol.get(0)); + CasesImport casesImport = casesImportService.getOne(wrapper); + if (BeanUtil.isNotEmpty(casesImport)) { + // 如果是紧急事件content使用原始工单的content + if ("3".equals(dto.getScenceType())) { + dto.setContent(casesImport.getCaseContent()); + } else { + dto.setContent(dto.getTitle()); + } + // 如果类型是同人事件,上报⼈姓名和电话不取原始工单,直接从预警因素字段取,顿号分隔。 + if ("2".equals(dto.getScenceType())) { + String warnFactor = dto.getWarnFactor(); + String[] split = warnFactor.split("、"); + if (split.length == 2) { + dto.setEventCreatorTel(split[0]); + dto.setEventCreator(split[1]); + } else { + dto.setEventCreatorTel(split[0]); + } } else { - dto.setEventCreatorTel(split[0]); + dto.setEventCreator(casesImport.getCreatorName()); + dto.setEventCreatorTel(casesImport.getCreatorTel()); } - } else { - dto.setEventCreator(casesImport.getCreatorName()); - dto.setEventCreatorTel(casesImport.getCreatorTel()); + dto.setEventPlaceName(casesImport.getCaseAddress()); + dto.setEventCoordinate(casesImport.getCaseLnglat()); + String jsonStr = JSONUtil.toJsonStr(dto); + String accessToken = remoteCallsService.getAccessToken(); + HttpRequest.post(url + "/gateway/event/event/eventData/imports") + .header("Authorization", "Bearer " + accessToken) + .body(jsonStr).execute().body(); + log.info("==========重新推送驾驶舱完成========="); } - dto.setEventPlaceName(casesImport.getCaseAddress()); - dto.setEventCoordinate(casesImport.getCaseLnglat()); - String accessToken = remoteCallsService.getAccessToken(); - String jsonStr = JSONUtil.toJsonStr(dto); - HttpRequest.post(url + "/gateway/event/event/eventData/imports") - .header("Authorization", "Bearer " + accessToken) - .body(jsonStr).execute().body(); - log.info("==========重新推送驾驶舱完成========="); } } } @@ -216,8 +226,8 @@ public class AEventsServiceImpl implements AEventsService { y.setInnerEventId(x.getInnerEventId()); y.setRelationNums(x.getRelationNums()); y.setAuditTime(x.getAuditTime()); - y.setEventTime(x.getEventTime()); - y.setFirstWarnTime(x.getFirstWarnTime()); + y.setEventTimeDate(x.getEventTimeDate()); + y.setFirstWarnTimeDate(x.getFirstWarnTimeDate()); y.setIsReport(x.getIsReport()); y.setMsgTypeName(x.getMsgTypeName()); y.setScenceName(x.getScenceName()); diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index c336c4e..35ef270 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -96,7 +96,7 @@ token: # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) - expireTime: 30 + expireTime: 0 diff --git a/ruoyi-admin/src/main/resources/mapper/pt/AEventsMapper.xml b/ruoyi-admin/src/main/resources/mapper/pt/AEventsMapper.xml index f828a60..ed6eb82 100644 --- a/ruoyi-admin/src/main/resources/mapper/pt/AEventsMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/pt/AEventsMapper.xml @@ -3,7 +3,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - select a.* from events a and a.title like concat('%',#{req.title},'%') @@ -11,7 +31,7 @@ and a.eventTime >= #{req.startTime} and a.eventTime <= #{req.endTime} and a.isReport is null - and a.isReport is not null + and (a.isReport = 1 or a.isReport = 2) and a.isReport = #{req.isReport} and a.isReport = #{req.isReport} and a.isReport = #{req.isReport} @@ -34,8 +54,8 @@ msgTypeName, scenceType, scenceTypeName, - firstWarnTime, - eventTime, + firstWarnTime, + eventTime, warnFactor, relationNums, nums, @@ -52,8 +72,8 @@ #{msgTypeName}, #{scenceType}, #{scenceTypeName}, - #{firstWarnTime}, - #{eventTime}, + #{firstWarnTimeDate}, + #{eventTimeDate}, #{warnFactor}, #{relationNums}, #{nums}, @@ -86,10 +106,10 @@ #{item} - order by CASE_DATE desc + order by CASE_DATE desc,isReport desc - select * from events where innerEventId = #{innerEventId} @@ -98,7 +118,7 @@ select * from cases_import where CASE_SERIAL = #{id} - select * from events order by eventTime limit 1 @@ -121,7 +141,7 @@ update cases_import - isReport = 1, + isReport = #{isReport}, auditTime = #{time}, where CASE_SERIAL in diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RsaUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RsaUtils.java new file mode 100644 index 0000000..aa2c8f0 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RsaUtils.java @@ -0,0 +1,153 @@ +package com.ruoyi.common.utils; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +/** + * RSA加密解密 + * + * @author ruoyi + **/ +public class RsaUtils +{ + // Rsa 私钥 + public static String privateKey = "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAnbAlNlYuctm5GmkA\n" + + "5692KWiJd9cTeL2sCvWsGDfWyPXECeF9G4MKGijreQzJkGJ96I5w0Kvj0Z47eP7s\n" + + "2Vj7IwIDAQABAkEAgbPrR+BnYEy5toF8HxXx6Wl0+T/NYlkQ9ArTPTBg2PYTXSvT\n" + + "LoJqrWss688w7WIwUz5lyVKKeRFWkxe9T4RIUQIhAM6BMCzJybFtAszEgBBDdtxj\n" + + "eDiXAk3zcsqcltHE/i/PAiEAw3ulbhgLYnXJIfymCsMgnyrESOyQxKDhQOm2Pnj/\n" + + "YG0CICx9Corroic2S/8falOWpTnPuCvA5L80bouV9qwUm4pjAiEAkJ4U0NHw+jJx\n" + + "Tjd/D08z/wzAkcKRhyYN/tvn+2fAZjECICkVQ6VWohPiibqIdVffCwXK3jSi5SJ3\n" + + "ddcmzYQBJFLv"; + + /** + * 私钥解密 + * + * @param text 待解密的文本 + * @return 解密后的文本 + */ + public static String decryptByPrivateKey(String text) throws Exception + { + return decryptByPrivateKey(privateKey, text); + } + + /** + * 公钥解密 + * + * @param publicKeyString 公钥 + * @param text 待解密的信息 + * @return 解密后的文本 + */ + public static String decryptByPublicKey(String publicKeyString, String text) throws Exception + { + X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 私钥加密 + * + * @param privateKeyString 私钥 + * @param text 待加密的信息 + * @return 加密后的文本 + */ + public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception + { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 私钥解密 + * + * @param privateKeyString 私钥 + * @param text 待解密的文本 + * @return 解密后的文本 + */ + public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception + { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + return new String(result); + } + + /** + * 公钥加密 + * + * @param publicKeyString 公钥 + * @param text 待加密的文本 + * @return 加密后的文本 + */ + public static String encryptByPublicKey(String publicKeyString, String text) throws Exception + { + X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(text.getBytes()); + return Base64.encodeBase64String(result); + } + + /** + * 构建RSA密钥对 + * + * @return 生成后的公私钥信息 + */ + public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException + { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(1024); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); + String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded()); + String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded()); + return new RsaKeyPair(publicKeyString, privateKeyString); + } + + /** + * RSA密钥对对象 + */ + public static class RsaKeyPair + { + private final String publicKey; + private final String privateKey; + + public RsaKeyPair(String publicKey, String privateKey) + { + this.publicKey = publicKey; + this.privateKey = privateKey; + } + + public String getPublicKey() + { + return publicKey; + } + + public String getPrivateKey() + { + return privateKey; + } + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 3d13d6f..4601af0 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -119,7 +119,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter // .antMatchers("/pt/**").anonymous() // .antMatchers("/gateway/event/event/eventData/**").anonymous() // .antMatchers("/gateway/event/event/eventData/eventProgress/**").anonymous() - .antMatchers("/earlyWarningAudit/**").permitAll() + .antMatchers("/earlyWarningAudit/massEvents/login").permitAll() + .antMatchers("/earlyWarningAudit/massEvents/appLogin").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated() .and() diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java index 67267b7..1c6c4e7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -1,6 +1,8 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; + +import com.ruoyi.common.utils.RsaUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -52,6 +54,104 @@ public class SysLoginService @Autowired private ISysConfigService configService; + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @return 结果 + */ + public String login1(String username, String password) + { + String strP = ""; + try { + strP = RsaUtils.decryptByPrivateKey(password); + } catch (Exception e) { + throw new RuntimeException(e); + } + // 验证码校验 +// validateCaptcha(username, code, uuid); + // 登录前置校验 + loginPreCheck(username, strP); + // 用户验证 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, strP); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + + /** + * 登录验证 + * + * @param username 用户名 + * @param password 密码 + * @return 结果 + */ + public String login2(String username, String password) + { + // 验证码校验 +// validateCaptcha(username, code, uuid); + // 登录前置校验 + loginPreCheck(username, password); + // 用户验证 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 生成token + return tokenService.createToken(loginUser); + } + /** * 登录验证 *