Commit e49df974 authored by guozhipeng's avatar guozhipeng

去除注解@(requires: 'any')

parent e2364153
...@@ -4,7 +4,7 @@ using { db.productStore as productStoreDb } from '../db/cds/master/productStore' ...@@ -4,7 +4,7 @@ using { db.productStore as productStoreDb } from '../db/cds/master/productStore'
service masterService @(requires: 'any'){ service masterService {
entity Uom as projection on masterDb.Uom; entity Uom as projection on masterDb.Uom;
entity UomType as projection on masterDb.UomType; entity UomType as projection on masterDb.UomType;
entity StatusItem as projection on masterDb.StatusItem; entity StatusItem as projection on masterDb.StatusItem;
......
...@@ -21,11 +21,13 @@ import org.springframework.security.core.GrantedAuthority; ...@@ -21,11 +21,13 @@ import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.*; import java.util.Collection;
import java.util.List;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -57,11 +59,7 @@ public class OperateAuthFilter implements Filter { ...@@ -57,11 +59,7 @@ public class OperateAuthFilter implements Filter {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletResponse response = (HttpServletResponse) servletResponse;
String language = request.getHeader("language");
String appKey = request.getHeader("appKey"); //用户appKey String appKey = request.getHeader("appKey"); //用户appKey
if (appKey == null || "".equals(appKey)) {
appKey = request.getParameter("appKey");
}
String uri = request.getRequestURI(); String uri = request.getRequestURI();
String ip = request.getRemoteAddr(); String ip = request.getRemoteAddr();
log.info("requestIP:{}, requestURI:{}, method:{}, appKey:{}", ip, uri, request.getMethod(), appKey); log.info("requestIP:{}, requestURI:{}, method:{}, appKey:{}", ip, uri, request.getMethod(), appKey);
...@@ -77,96 +75,20 @@ public class OperateAuthFilter implements Filter { ...@@ -77,96 +75,20 @@ public class OperateAuthFilter implements Filter {
} }
authorities = authentication.getAuthorities();//角色集合[] authorities = authentication.getAuthorities();//角色集合[]
} }
if (username == null || "".equals(username)) { log.info("[OperateAuthFilter.doFilter]登录用户 username:{}", username);
Result<Object> wrapResult = Result.error("未登录系统,禁止访问!"); log.info("[OperateAuthFilter.doFilter]角色集合 authorities:{}", authorities);
writeResult(response, wrapResult); log.info("[OperateAuthFilter.doFilter]权限认证 authorization: {}", request.getHeader("authorization"));
return;
} else if (
!StringUtils.isEmpty(appKey) &&
CommonConstant.userAuthenticationMap.containsKey(appKey) &&
CommonConstant.userAuthenticationMap.get(appKey).getIsPassAuth() == Boolean.TRUE
) {
// 返回请求体数据 是否通过鉴权(True: 通过, Flase: 失败)
Result<Object> wrapResult = Result.error("未登录系统,禁止访问!");
writeResult(response, wrapResult);
return;
}
log.info("登录用户 username:{}", username);
log.info("角色集合 authorities:{}", authorities);
log.info("权限认证 authorization: {}", request.getHeader("authorization"));
if (request.getHeader("authorization") == null || "".equals(request.getHeader("authorization"))) {
Result<Object> wrapResult = Result.error("authorization is null 未登录系统,禁止访问!");
writeResult(response, wrapResult);
return;
}
//appKey partyId4Rule roleTypeId4Rule language
String partyId4Rule = null;
String roleTypeId4Rule = null;
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();
if ((appKey == null || "".equals(appKey))) { if (cookies != null && cookies.length > 0) {
if ((cookies != null && cookies.length > 0)) {
for (Cookie cookie : cookies) { for (Cookie cookie : cookies) {
//重新赋值 log.info("[OperateAuthFilter.doFilter]cookie: {}", cookie.getName() + "=" + cookie.getValue());
if ("appKey".equals(cookie.getName())) {
appKey = cookie.getValue();
}
if ("partyId4Rule".equals(cookie.getName())) {
partyId4Rule = cookie.getValue();
}
if ("roleTypeId4Rule".equals(cookie.getName())) {
roleTypeId4Rule = cookie.getValue();
}
if ("language".equals(cookie.getName())) {
language = cookie.getValue();
}
}
/*if (partyId4Rule == null || "".equals(partyId4Rule)) {
Result<Object> wrapResult = Result.error("partyId4Rule 不能为空!");
writeResult(response, wrapResult);
return;
}*/
if (appKey == null || "".equals(appKey)) {
Result<Object> wrapResult = Result.error("appKey 不能为空!");
writeResult(response, wrapResult);
return;
}
if (roleTypeId4Rule == null || "".equals(roleTypeId4Rule)) {
Result<Object> wrapResult = Result.error("roleTypeId4Rule 不能为空!");
writeResult(response, wrapResult);
return;
}
if (language == null || "".equals(language)) {
Result<Object> wrapResult = Result.error("language 不能为空!");
writeResult(response, wrapResult);
return;
}
} else {
Result<Object> wrapResult = Result.error("cookies 不能为空!");
writeResult(response, wrapResult);
return;
}
} else {
if (!CommonConstant.userAuthenticationMap.containsKey(appKey)
|| CommonConstant.userAuthenticationMap.get(appKey).getIsPassAuth() != Boolean.TRUE) {
String requestParamStr = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
Map<String, String> requestValueMap = JsonUtil.convertJsonToMap(requestParamStr);
log.info("paramStr:{}, isJson:{}", requestParamStr, JsonUtil.isJsonObject(requestParamStr));
//用户角色鉴权校验
Result wrapResult = OperateAuthUtil.verifyRequestPermission(requestParamStr, requestValueMap.get("roleTypeId"));
if (!ResponseConstant.SUCCESS_CODE.equals(wrapResult.getCode())) {
writeResult(response, wrapResult);
return;
} }
} else { } else {
Result<Object> wrapResult = Result.error("appKey 不能为空。。。!"); log.info("[OperateAuthFilter.doFilter]cookie: null");
writeResult(response, wrapResult);
return;
} }
}
// IP白名单 // IP白名单
if (ipWhitelist) { if (ipWhitelist) {
String language = request.getHeader("language");
if (ipWhitelistMap.isEmpty()) { if (ipWhitelistMap.isEmpty()) {
response.setCharacterEncoding(StandardCharsets.UTF_8.name()); response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType("text/html; charset=utf-8"); response.setContentType("text/html; charset=utf-8");
...@@ -190,9 +112,34 @@ public class OperateAuthFilter implements Filter { ...@@ -190,9 +112,34 @@ public class OperateAuthFilter implements Filter {
} }
} }
} }
//TODO 郭智朋 测试中 处理ODATA接口
//TODO 处理ODATA接口 使用权限控制数据显示 /*Cookie[] cookies = request.getCookies();
if (Pattern.matches("(.*/odata/v4/.*)", uri)) { if (appKey == null && cookies != null && cookies.length > 0 && "/odata/v4/orderService/$batch".equals(uri)) {
List<Cookie> cookiesList = Arrays.asList(cookies);
//appKey partyId4Rule roleTypeId4Rule language
String partyId4Rule = null;
String roleTypeId4Rule = null;
String language = null;
for (Cookie cookie : cookiesList) {
if ("appKey".equals(cookie.getName())) {
appKey = cookie.getValue();
}
if ("partyId4Rule".equals(cookie.getName())) {
partyId4Rule = cookie.getValue();
}
if ("roleTypeId4Rule".equals(cookie.getName())) {
roleTypeId4Rule = cookie.getValue();
}
if ("language".equals(cookie.getName())) {
language = cookie.getValue();
}
}
// 返回请求体数据 是否通过鉴权(True: 通过, Flase: 失败)
if (
!StringUtils.isEmpty(appKey) &&
CommonConstant.userAuthenticationMap.containsKey(appKey) &&
CommonConstant.userAuthenticationMap.get(appKey).getIsPassAuth() == Boolean.TRUE
) {
String requestParamStr = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); String requestParamStr = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
//GET OrderHeaderItemView?$count=true&$select=createdBy_Text,docId,headerId,lineNo,modifiedBy_Text&$skip=0&$top=30 HTTP/1.1 //GET OrderHeaderItemView?$count=true&$select=createdBy_Text,docId,headerId,lineNo,modifiedBy_Text&$skip=0&$top=30 HTTP/1.1
String[] gets = requestParamStr.split("GET "); String[] gets = requestParamStr.split("GET ");
...@@ -211,21 +158,19 @@ public class OperateAuthFilter implements Filter { ...@@ -211,21 +158,19 @@ public class OperateAuthFilter implements Filter {
if (requestResult.isSuccess()) { if (requestResult.isSuccess()) {
requestParamStrNew = gets[0] + "GET " + requestResult.getResult() + " HTTP" + https[1]; requestParamStrNew = gets[0] + "GET " + requestResult.getResult() + " HTTP" + https[1];
} else { } else {
writeResult(response, requestResult);
return;// 跳过后面的认证 return;// 跳过后面的认证
} }
log.info("paramStr:{}, isJson:{}", requestParamStrNew, JsonUtil.isJsonObject(requestParamStr)); log.info("paramStr:{}, isJson:{}", requestParamStrNew, JsonUtil.isJsonObject(requestParamStr));
request = new AuthHttpServletRequest(request, requestParamStrNew, "appKey", appKey); request = new AuthHttpServletRequest(request, requestParamStrNew, "appKey", appKey);
} }
log.info("requestIP:{}, requestURI:{}, method:{}, appKey:{}", ip, uri, request.getMethod(), appKey); }
log.info("requestIP:{}, requestURI:{}, method:{}, appKey:{}", ip, uri, request.getMethod(), appKey);*/
// 日志文件认证 // 日志文件认证
if (uri.startsWith("/logs/")) { if (uri.startsWith("/logs/")) {
if (StringUtils.isBlank(tokenForLogs)) { if (StringUtils.isBlank(tokenForLogs)) {
throw new BtpException("init error!"); throw new BtpException("init error!");
} }
if (!tokenForLogs.equals(request.getParameter("appKey"))) { if (!tokenForLogs.equals(request.getParameter("appKey"))) {
Result<Object> wrapResult = Result.error("appKey 不能为空!");
writeResult(response, wrapResult);
return; return;
} }
} }
...@@ -234,13 +179,20 @@ public class OperateAuthFilter implements Filter { ...@@ -234,13 +179,20 @@ public class OperateAuthFilter implements Filter {
filterChain.doFilter(request, servletResponse); filterChain.doFilter(request, servletResponse);
return;// 跳过后面的认证 return;// 跳过后面的认证
} }
// OData接口仅允许本机访问
if (Pattern.matches("(.*/odata/v4/.*)", uri)) {
if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {// 本机访问
} else {
if (!Pattern.matches("(.*exampleService/ExampleView.*)", uri)) {
return;
}
}
}
// 禁止非POST/GET方式访问 // 禁止非POST/GET方式访问
if (!request.getMethod().equals("POST") && !request.getMethod().equals("GET")) { /*if (!request.getMethod().equals("POST") && !request.getMethod().equals("GET")) {
Result<Object> wrapResult = Result.error("禁止非POST/GET方式访问");
writeResult(response, wrapResult);
return; return;
} }
/*if (request.getMethod().equals("GET") && ("/index.html".equals(uri))) {// "/index.html"跳转到"/" if (request.getMethod().equals("GET") && ("/index.html".equals(uri))) {// "/index.html"跳转到"/"
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache"); response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0"); response.setHeader("Expires", "0");
...@@ -254,7 +206,7 @@ public class OperateAuthFilter implements Filter { ...@@ -254,7 +206,7 @@ public class OperateAuthFilter implements Filter {
request.getServletContext().getRequestDispatcher("/index.html").forward(request, response);//重定向 request.getServletContext().getRequestDispatcher("/index.html").forward(request, response);//重定向
return; return;
}*/ }*/
boolean allowUri = Pattern.matches("(.*/login/.*|.*/oauth2Login/.*|.*/odata/v4/.*)", uri); boolean allowUri = Pattern.matches("(.*/login/.*|.*/odata/v4/.*)", uri);
//排除用户登录和非Post请求 //排除用户登录和非Post请求
if (!allowUri && request.getMethod().equals("POST")) { if (!allowUri && request.getMethod().equals("POST")) {
//校验请求头中appKey参数: appKey为空或其不存在于系统中,或状态未鉴权通过均拦截 //校验请求头中appKey参数: appKey为空或其不存在于系统中,或状态未鉴权通过均拦截
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment