作者 shenhailong

1. 分单航班号跟着主单走

2. 统一认证逻辑
... ... @@ -1229,6 +1229,10 @@ public class ManifestController extends BasicController {
}
manifestService.save(manifest);
//修改分单航班号航班日期 分单需要根据主单走
if (manifest.getId() != null){
preparesecondaryServer.update(manifest.getFlightno(), manifest.getFlightdate(), manifest.getId());
}
receiptService.saveFromManifest(manifest, type);
// 生成报文并且发送
String ndlrPath = MessageKit.getMessagePath(MessageType.NDLR);
... ...
... ... @@ -239,10 +239,16 @@ public class LoginController {
rm.setMsg("1");
}
} else {
// 登录用户
Subject subject = SecurityUtils.getSubject();
subject.getSession().setAttribute("user", user);
UsernamePasswordToken token = new UsernamePasswordToken(loginAccount, MD5Tools.MD5(password));
UsernamePasswordToken token = null;
if ("".equals(userEntity.getUamId())){
// 登录用户
token = new UsernamePasswordToken(loginAccount, MD5Tools.MD5(password));
}else {
token = new UsernamePasswordToken(loginAccount, userEntity.getPassword());
}
// System.out.println(loginAccount+" " + password);
try {
subject.login(token);
... ...
... ... @@ -6,12 +6,22 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.agent.entity.system.*;
import com.agent.service.system.FunctionService;
import com.agent.util.HttpClientUtil;
import com.google.gson.Gson;
import jdk.nashorn.internal.runtime.regexp.RegExp;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
... ... @@ -32,6 +42,21 @@ import com.plugin.easyui.EasyPage;
@RequestMapping({"/system/user" })
public class UserController extends BasicController {
/**
* 验证服务票据响应属性名
*/
private static final String SERVICE_RESPONESE = "serviceResponse";
private static final String AUTHENTICATION_SUCCESS = "authenticationSuccess";
private static final String LOGIN_NAME = "LOGIN_NAME";
private static final String ATTRIBUTES = "attributes";
private static final String USER_ID = "USER_ID";
@Value("${ger.req-url}")
private String requestUrl;
@Value("${ger.res-url}")
private String responseUrl;
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Resource
... ... @@ -43,6 +68,9 @@ public class UserController extends BasicController {
@Resource
private BasicAgentService agentService;
@Resource
private FunctionService functionService;
/**
* 用户账号管理
* @return
... ... @@ -246,62 +274,137 @@ public class UserController extends BasicController {
return model;
}
// /**
// * 资源同步
// */
// @RequestMapping(value = "/userSynchronization")
// @ResponseBody
// public ResultMessage userSynchronization(@RequestBody UAM uam) throws Exception {
// if ("user".equals(uam.getResType())){
// List<UserData> data = uam.getData();
// // 判断该用户是否存在
// int i = 0;
// for (UserData userData: data){
// if (userService.countLonginName(userData.getLOGIN_NAME()) > 0){
/**
* 资源同步
*/
@RequestMapping(value = "/userSynchronization", method = RequestMethod.POST)
@ResponseBody
public ResultMessage userSynchronization(@RequestBody UAM uam) throws Exception {
if ("user".equals(uam.getResType())){
List<UserData> data = uam.getData();
// 判断该用户是否存在
int i = 0;
for (UserData userData: data){
if (userService.findLoginaccount(userData.getLOGIN_NAME()) != null){
// log.info("通过账号为条件更新");
// i = userService.updateSyncUserLoginName(userData);
// }else {
// if (kakoUserMapperl.findLonginName("", userDate.getUSER_ID()) != null){
// KakoUser kakoUser = new KakoUser();
// kakoUser.setLoginName(userDate.getLOGIN_NAME());
// kakoUser.setPassword(userDate.getPWD());
// kakoUser.setUserSyncId(userDate.getUSER_ID());
// kakoUser.setMobile(userDate.getMOBILE());
// kakoUser.setEmail(userDate.getEMAIL());
// kakoUser.setDelFlag("0");
// kakoUser.setName(userDate.getUSER_NAME());
// kakoUser.setCompanyId("1");
// kakoUser.setOfficeId("5e95a0f081c64fce9f85d59e18cfdc5f");
// kakoUser.setUpdateBy("tyrz");
// kakoUser.setLoginFlag("1");
// kakoUser.setUpdateDate(new Date());
i = userService.updateSyncUserLoginName(userData);
}else {
if (userService.findUamId(userData.getUSER_ID()) != null){
// log.info("账号不存在用过统一认证id更新");
// i = kakoUserMapperl.updateSyncUserId(kakoUser);
// }else {
// KakoUser kakoUser = new KakoUser();
// kakoUser.setId(UUID.randomUUID().toString());
// kakoUser.setLoginName(userDate.getLOGIN_NAME());
// kakoUser.setPassword(userDate.getPWD());
// kakoUser.setUserSyncId(userDate.getUSER_ID());
// kakoUser.setMobile(userDate.getMOBILE());
// kakoUser.setEmail(userDate.getEMAIL());
// kakoUser.setName(userDate.getUSER_NAME());
// kakoUser.setCompanyId("1");
// kakoUser.setOfficeId("5e95a0f081c64fce9f85d59e18cfdc5f");
// kakoUser.setLoginFlag("1");
// kakoUser.setCreateBy("tyrz");
// kakoUser.setUpdateBy("tyrz");
// kakoUser.setCreateDate(new Date());
// kakoUser.setUpdateDate(new Date());
i = userService.updateSyncUserId(userData);
}else {
// log.info("账号统一认证id都不在 新增");
// i = kakoUserMapperl.insertSelective(kakoUser);
// }
// }
// }
//
// return i > 0 ? new ResultMessage("200","资源同步成功"):new ResultMessage("202", "资源同步失败");
// }
// return new ResultMessage("201","不是用户信息");
// }
UserEntity userEntity = new UserEntity();
userEntity.setPassword(userData.getPWD());
userEntity.setLoginaccount(userData.getLOGIN_NAME());
userEntity.setRealName(userData.getUSER_NAME());
userEntity.setMobile(userData.getMOBILE());
userEntity.setUamId(userData.getUSER_ID());
userEntity.setStatus(0);
userEntity.setLoginerror(0);
if (userService.save(userEntity)!=null){
i = 1;
}else {
i = 0;
}
}
}
}
return i > 0 ? new ResultMessage("200","资源同步成功"):new ResultMessage("202", "资源同步失败");
}
return new ResultMessage("201","不是用户信息");
}
/**
* 转发致ssoLoginjsp页面
* @return
*/
@RequestMapping(value = "/uamJump")
public String ssoLoginJsp(){
return "ssoLogin";
}
/**
* 验证票据
* @param ticket
* @return
* @throws Exception
*/
@RequestMapping (value = "/ssoLogin")
@ResponseBody
public ResponseModel ssoLogin(String ticket) throws Exception {
ResponseModel responseModel = new ResponseModel();
try {
// log.info("票据接受:{}", ticket);
if (!org.springframework.util.StringUtils.isEmpty(ticket)){
// log.info("开始验证票据");
String result = HttpClientUtil.httpGet("http://10.5.14.103:27080/sso/p3/serviceValidate?format=json&service="+"http://10.50.3.73:8003/sso/ssoLogin.html"+"&ticket="+ticket, "UTF-8");
// log.info("验证票据返回值:{}", result);
Map<String, Object> userInfo = resolveUserInfo(result);
if (userInfo != null){
UserEntity user = userService.findLoginaccount(userInfo.get("loginName").toString());
// log.info("查询用户信息:{}", user);
if (user != null){
// 登录用户
Subject subject = SecurityUtils.getSubject();
subject.getSession().setAttribute("user", user);
UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginaccount(), user.getPassword());
try {
subject.login(token);
subject.getSession().setAttribute("permission", roleService
.findAllFunctionByRole(((UserEntity) subject.getSession().getAttribute("user")).getRole()));
subject.getSession().setAttribute("all_function", functionService.findAll());
//登录成功 请空失败次数
userService.emptyLoginerror(user.getLoginaccount());
responseModel.setStatus(200);
return responseModel;
} catch (UnknownAccountException e) {
responseModel.setStatus(500);
responseModel.setMsg("1");
}
}else {
responseModel.setStatus(204);
responseModel.setMsg("该用户不存在本系统,请先去同步信息");
return responseModel;
}
}else {
responseModel.setStatus(203);
responseModel.setMsg("远程获取用户信息失败"+result);
return responseModel;
}
}else {
responseModel.setStatus(202);
responseModel.setMsg("票据为空,获取失败");
return responseModel;
}
}catch (Exception e){
e.printStackTrace();
responseModel.setStatus(201);
responseModel.setMsg(e.toString());
return responseModel;
}
return null;
}
public Map<String, Object> resolveUserInfo(String result){
// result="{\"serviceResponse\":{\"authenticationSuccess\":{\"user\":\"shenhl\",\"attributes\":{\"isFromNewLogin\":[false],\"authenticationDate\":[1630484829.010000000],\"successfulAuthenticationHandlers\":[\"pwd\"],\"USER_ID\":\"1338722569884504064\",\"USER_NAME\":\"申海龙\",\"extend\":[],\"credentialType\":\"UsernamePasswordCredential\",\"samlAuthenticationStatementAuthMethod\":\"urn:oasis:names:tc:SAML:1.0:am:password\",\"ipTerritory\":\"\",\"authenticationMethod\":\"pwd\",\"equipType\":\"pc\",\"clientIp\":\"172.19.0.1\",\"isDefaultPwd\":\"false\",\"longTermAuthenticationRequestTokenUsed\":[false],\"LOGIN_NAME\":\"shenhl\",\"MOBILE\":\"17600319854\"}}}}";
//认证成功,解析用户信息
Gson gson = new Gson();
Map resultMap = gson.fromJson(result, Map.class);
Object serviceResponse = resultMap.get(SERVICE_RESPONESE);
if(serviceResponse != null && serviceResponse instanceof Map){
Object authenticationSuccess = ((Map) serviceResponse).get(AUTHENTICATION_SUCCESS);
if(authenticationSuccess != null && authenticationSuccess instanceof Map){
Map<String, Object> userInfo = new HashMap<>();
userInfo.put("attributes", ((Map) authenticationSuccess).get(ATTRIBUTES));
Object attributes = ((Map) authenticationSuccess).get("attributes");
userInfo.put("loginName", ((Map) attributes).get(LOGIN_NAME));
userInfo.put("userId", ((Map) attributes).get(USER_ID));
return userInfo;
}
}
return null;
}
}
... ...
... ... @@ -12,6 +12,7 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.shiro.SecurityUtils;
... ... @@ -29,7 +30,9 @@ public class MyShiroController implements Filter {
}
private String publicAction[] = { "/login", "/doLogin", "/manifest/app/send",
"/receipt/a0608c4054662dd902e1314f7e450e3eaa81c114", "/manifest/f5f5669bbdecefd3dacfaba194647c35", "/getVerifyCode" };
"/receipt/a0608c4054662dd902e1314f7e450e3eaa81c114", "/manifest/f5f5669bbdecefd3dacfaba194647c35", "/getVerifyCode",
"/system/user/userSynchronization", "/system/user/uamJump", "/system/user/ssoLogin",
};
private String crossDomain[] = { "/cross/", "tracking/detail" };
// manifest/cross/grid.json
... ...
package com.agent.repository.agent;
import java.util.Date;
import java.util.List;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
... ... @@ -52,4 +53,10 @@ JpaSpecificationExecutor<PreparesecondaryEntity>{
@Query(value = "select count(id) from PREPARESECONDARY where WAYBILLNOMASTER = ?1 and WAYBILLNOSECONDARY=?2", nativeQuery = true)
int findAwbAwbH(String awb, String awbh);
@Transactional
@Modifying
@Query(value = "UPDATE PREPARESECONDARY SET FLIGHTNO=?1, FLIGHTDATE=?2 WHERE PREPAREMASTERID=?3", nativeQuery = true)
int update(String flightno, Date flightDate, Long awbaId);
}
... ...
... ... @@ -41,6 +41,9 @@ public interface UserRepository extends PagingAndSortingRepository<UserEntity, L
@Query(value = "select * from sys_user where LOGINACCOUNT = ?1", nativeQuery = true)
UserEntity findLoginaccount(String loginaccount);
@Query(value = "select * from sys_user where UAM_ID = ?1", nativeQuery = true)
UserEntity findUamId(String uamId);
// 锁定账户
@Transactional
@Modifying(clearAutomatically=true)
... ... @@ -60,5 +63,15 @@ public interface UserRepository extends PagingAndSortingRepository<UserEntity, L
@Query(value = "UPDATE SYS_USER SET loginerror = 0 where loginaccount=?1", nativeQuery = true)
public void emptyLoginerror(String loginaccount);
@Transactional
@Modifying(clearAutomatically = true)
@Query(value = "update SYS_USER SET loginaccount=?1 , password=?2,realName=?3,UAM_ID=?4 where loginaccount = ?1", nativeQuery = true)
public int updateSyncUserLoginName(String loginName, String pwd, String userName, String uamId);
@Transactional
@Modifying(clearAutomatically = true)
@Query(value = "update SYS_USER SET loginaccount=?1 , password=?2,realName=?3,UAM_ID=?4 where UAM_ID = ?4", nativeQuery = true)
public int updateSyncUserId(String loginName, String pwd, String userName, String uamId);
}
... ...
package com.agent.service.agent;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
... ... @@ -35,6 +36,11 @@ public class PreparesecondaryService extends BasicService<PreparesecondaryEntity
return preparesecondaryRepository.save(manifest);
}
@Transactional
public int update(String flightNo, Date flightdate, Long awbaId) {
return preparesecondaryRepository.update(flightNo, flightdate, awbaId);
}
public List<PreparesecondaryEntity> findAll(Long id) {
return preparesecondaryRepository.findAll(id);
}
... ...
... ... @@ -4,6 +4,7 @@ import java.util.List;
import javax.annotation.Resource;
import com.agent.entity.system.UserData;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
... ... @@ -151,6 +152,10 @@ public class UserService extends BasicService<UserEntity> {
public UserEntity findLoginaccount(String loginaccount){
return userDao.findLoginaccount(loginaccount);
}
//查询统一认证id 是否存在
public UserEntity findUamId(String uamId){
return userDao.findUamId(uamId);
}
// 锁定账户
public void updateStatus(String loginacount){
... ... @@ -168,4 +173,21 @@ public class UserService extends BasicService<UserEntity> {
userDao.emptyLoginerror(loginaccount);
}
// 通过账户更新
public int updateSyncUserLoginName(UserData userData){
return userDao.updateSyncUserLoginName(userData.getLOGIN_NAME(),
userData.getPWD(),
userData.getUSER_NAME(),
userData.getUSER_ID());
}
// 通过uamId更新
public int updateSyncUserId(UserData userData){
return userDao.updateSyncUserId(userData.getLOGIN_NAME(),
userData.getPWD(),
userData.getUSER_NAME(),
userData.getUSER_ID());
}
}
... ...
package com.agent.util;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
/**
* @author shenhailong
* <p>
* 2021/6/17/18:05
*/
public class HttpClientUtil {
public static String httpReader(String url, String code) {
System.out.println("GetPage:" + url);
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(url);
String result = null;
try {
client.executeMethod(method);
int status = method.getStatusCode();
if (status == HttpStatus.SC_OK) {
result = method.getResponseBodyAsString();
} else {
System.out.println("Method failed: " + method.getStatusLine());
}
} catch (HttpException e) {
// �����������쳣��������Э�鲻�Ի��߷��ص�����������
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
// ���������쳣
System.out.println("���������쳣��");
e.printStackTrace();
} finally {
// �ͷ�����
if (method != null) {
method.releaseConnection();
}
method = null;
client = null;
}
return result;
}
public static String httpGet(String url, String code) {
// log.info("GetPage:{}"+ url);
String content = null;
HttpClient httpClient = new HttpClient();
//����header
httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
GetMethod method = new GetMethod(url);
try {
int statusCode = httpClient.executeMethod(method);
System.out.println("httpClientUtils::statusCode=" + statusCode);
System.out.println(method.getStatusLine());
content = new String(method.getResponseBody(), code);
} catch (Exception e) {
System.out.println("time out");
e.printStackTrace();
} finally {
if (method != null) method.releaseConnection();
method = null;
httpClient = null;
}
return content;
}
public static String httpPost(String url, Map paramMap, String code) {
System.out.println("GetPage:" + url);
String content = null;
if (url == null || url.trim().length() == 0 || paramMap == null
|| paramMap.isEmpty()) {
return null;
}
HttpClient httpClient = new HttpClient();
//����header
httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT, "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");//
//��������
//httpClient.getHostConfiguration().setProxy("128.128.176.74", 808);
PostMethod method = new PostMethod(url);
Iterator it = paramMap.keySet().iterator();
while (it.hasNext()) {
String key = it.next() + "";
Object o = paramMap.get(key);
if (o != null && o instanceof String) {
method.addParameter(new NameValuePair(key, o.toString()));
}
if (o != null && o instanceof String[]) {
String[] s = (String[]) o;
if (s != null) {
for (int i = 0; i < s.length; i++) {
method.addParameter(new NameValuePair(key, s[i]));
}
}
}
}
try {
int statusCode = httpClient.executeMethod(method);
System.out.println("httpClientUtils::statusCode=" + statusCode);
System.out.println(method.getStatusLine());
content = new String(method.getResponseBody(), code);
} catch (Exception e) {
System.out.println("time out");
e.printStackTrace();
} finally {
if (method != null) {
method.releaseConnection();
}
method = null;
httpClient = null;
}
return content;
}
public static String httpPost(String url, Map paramMap) {
//���룺UTF-8
return HttpClientUtil.httpPost(url, paramMap, "UTF-8");
}
}
... ...
... ... @@ -39,3 +39,6 @@ custom.message.password=vmvnv1v2VV
custom.message.server=10.50.3.61
custom.message.remotedir=nms_customs_xml2
ger.req-url= "http://10.5.14.103:27080/sso/p3/serviceValidate?format=json&service="
ger.res-url= "http://10.50.3.73:8003/agent_test/sso/ssoLogin.html"
... ...
... ... @@ -612,7 +612,7 @@ manifest.delivery=\u4fdd\u5b58\u5e76\u53d1\u9001\u5230\u4ea4\u8fd0
manifest.response_text=\u8FD0\u5355\u72B6\u6001
manifest.loginaccount=\u7528\u6237\u8d26\u53f7
manifest.agentCode=\u8d27\u4ee3\u4fe1\u606f
manifest.excel=\u5bfc\u5165\u0045\u0078\u0063\u0065\u006c\u6587\u4ef6
manifest.excel=\u5bfc\u5165\u0045\u0078\u0063\u0065\u006c\u6587\u4ef6\u8fd0\u5355\u72b6\u6001
manifest.customs_status_001 = \u666E\u901A\u8D27\u7269
manifest.customs_status_002 = \u56FD\u9645\u8F6C\u8FD0\u8D27\u7269
... ...
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>郑州机场航空物流信息平台</title>
<link href="<%=basePath %>resource/css/login.css" rel="stylesheet">
<script src="<%=basePath %>resource/easyui/jquery.min.js"></script>
<script type="text/javascript" src="<%=basePath %>resource/layer-v3.0.3/layer/layer.js"></script>
</head>
<body>
<div id="login">
<div style="height: 83px;margin-top: 32px;">
<div style="font-size:28px;color:white;margin-left:400px;">河南省机场集团有限公司</div>
<div style="font-size:16px;color:white;margin-left:510px;">&nbsp;郑州机场航空物流信息平台</div>
</div>
</div>
<div id="copyright"></div>
</body>
<script type="text/javascript">
// 获取地址栏参数
function getUrlKey(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null
}
// 获取票据
function ticket() {
var ticket = this.getUrlKey("ticket");
if (ticket!=undefined){
var loginParams = {
ticket : ticket
}
$.post('<%=basePath %>system/user/ssoLogin',loginParams,function(res){
//NProgress.done();
var status = res.status;
console.log("------->"+status);
console.log("------->"+res);
if (status !== 200) {
var msg = "该账户不存在本系统";
$.growl({ title: "消息提示", message: msg });
} else {
window.location.href='<%=basePath %>manifest/list';
}
}).catch(error => {
$.growl({ title: "消息提示", message: error });
//this.logining = false;
});
}else {
console.log("票据为空 请求路由")
window.location.href = 'http://10.5.14.103:27080/sso/login?service=http://10.50.3.73:8003/sso/ssoLogin.html'
}
}
$(document).ready(function(){
ticket();
});
</script>
</html>
\ No newline at end of file
... ...
... ... @@ -3,7 +3,6 @@
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- shiro -->
<filter>
<filter-name>shiroFilter</filter-name>
... ... @@ -138,5 +137,4 @@
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
\ No newline at end of file
... ...