Skip to content

Commit 948968d

Browse files
author
张立志
committed
修改时间误差函数
1 parent 425a6a1 commit 948968d

File tree

15 files changed

+102
-46
lines changed

15 files changed

+102
-46
lines changed

Diff for: sparrow-mvc-thymeleaf/src/main/java/com/sparrow/mvc/ThymeleafEngineUtils.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,19 @@
2020
import com.sparrow.constant.Config;
2121
import com.sparrow.protocol.constant.Extension;
2222
import com.sparrow.utility.ConfigUtility;
23-
import java.io.IOException;
23+
import org.thymeleaf.TemplateEngine;
24+
import org.thymeleaf.context.WebContext;
25+
import org.thymeleaf.spring5.dialect.SpringStandardDialect;
26+
import org.thymeleaf.templatemode.TemplateMode;
27+
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
28+
2429
import javax.servlet.FilterConfig;
2530
import javax.servlet.ServletContext;
2631
import javax.servlet.ServletRequest;
2732
import javax.servlet.ServletResponse;
2833
import javax.servlet.http.HttpServletRequest;
2934
import javax.servlet.http.HttpServletResponse;
30-
import org.thymeleaf.TemplateEngine;
31-
import org.thymeleaf.context.WebContext;
32-
import org.thymeleaf.spring5.SpringTemplateEngine;
33-
import org.thymeleaf.spring5.dialect.SpringStandardDialect;
34-
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
35-
import org.thymeleaf.templatemode.TemplateMode;
36-
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
35+
import java.io.IOException;
3736

3837
public class ThymeleafEngineUtils {
3938
private static TemplateEngine templateEngine;

Diff for: sparrow-mvc/src/main/java/com/sparrow/mvc/interceptor/AuthInterceptor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public boolean preHandle(HttpServletRequest httpRequest, HttpServletResponse htt
7878

7979
String actionName = handlerExecutionChain.getActionName();
8080
Authenticator authenticator = container.getBean(SysObjectName.AUTHENTICATOR_SERVICE);
81-
String permission = CookieUtility.getPermission(httpRequest);
81+
String permission = CookieUtility.getPermission(httpRequest,Constant.REQUEST_HEADER_KEY_LOGIN_TOKEN);
8282
String deviceId = this.sparrowServletUtility.getServletUtility().getDeviceId(httpRequest);
8383
LoginUser user = authenticator.authenticate(permission, deviceId);
8484
httpRequest.setAttribute(User.ID, user.getUserId());

Diff for: sparrow-test/src/main/java/com.sparrow/controller/HelloController.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.sparrow.protocol.BusinessException;
2323
import com.sparrow.protocol.LoginUser;
2424
import com.sparrow.protocol.LoginUserStatus;
25+
import com.sparrow.protocol.constant.Constant;
2526
import com.sparrow.protocol.constant.SparrowError;
2627
import com.sparrow.protocol.pager.PagerResult;
2728
import com.sparrow.servlet.ServletContainer;
@@ -111,8 +112,8 @@ public ViewWithModel login(HttpServletRequest request) {
111112
loginToken.setDays(20);
112113
loginToken.setUserId(1L);
113114
loginToken.setUserName("zhangsan");
114-
String sign = authenticatorService.sign(loginToken,new LoginUserStatus(LoginUserStatus.STATUS_NORMAL,1L));
115-
servletContainer.rootCookie(User.PERMISSION, sign, 6);
115+
String sign = authenticatorService.sign(loginToken, new LoginUserStatus(LoginUserStatus.STATUS_NORMAL, 1L));
116+
servletContainer.rootCookie(Constant.REQUEST_HEADER_KEY_LOGIN_TOKEN, sign, 6);
116117
return ViewWithModel.redirect("welcome", loginToken);
117118
}
118119

Diff for: sparrow-test/src/test/java/com/sparrow/orm/DatasourceTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import com.sparrow.core.spi.ApplicationContext;
2222
import com.sparrow.datasource.DataSourceFactory;
2323
import com.sparrow.datasource.DataSourceValidChecker;
24-
import com.sparrow.datasource.checker.ConnectionValidCheckerAdapter;
24+
import com.sparrow.support.checker.ConnectionValidCheckerAdapter;
2525
import org.junit.Test;
2626

2727
import javax.sql.DataSource;

Diff for: sparrow/src/main/java/com/sparrow/constant/User.java

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package com.sparrow.constant;
1919

2020
public class User {
21-
public static final String PERMISSION = "PERMISSION";
2221
/**
2322
* 系统管理员
2423
*/

Diff for: sparrow/src/main/java/com/sparrow/servlet/impl/AbstractServletContainer.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@
3636
import java.util.Map;
3737
import java.util.TreeMap;
3838

39+
/**
40+
* https://sparrowzoo.feishu.cn/docx/FyezdyOOWofMOQxIhnocm83Cndg
41+
*/
3942
public abstract class AbstractServletContainer implements ServletContainer {
4043
private static Logger logger = LoggerFactory.getLogger(AbstractServletContainer.class);
4144
private ServletUtility servletUtility = ServletUtility.getInstance();
@@ -125,19 +128,19 @@ public Map<String, String> getParameters() {
125128
@Override
126129
public void flash(String key, Object value) {
127130
this.getRequest().getSession()
128-
.setAttribute(key, value);
131+
.setAttribute(key, value);
129132
}
130133

131134
@Override
132135
public <T> T flash(String key) {
133136
return (T) this.getRequest().getSession()
134-
.getAttribute(key);
137+
.getAttribute(key);
135138
}
136139

137140
@Override
138141
public <T> T removeFlash(String key) {
139142
T t = (T) this.getRequest().getSession()
140-
.getAttribute(key);
143+
.getAttribute(key);
141144
this.getRequest().getSession().removeAttribute(key);
142145
return t;
143146
}

Diff for: sparrow/src/main/java/com/sparrow/support/DefaultAuthenticatorService.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.sparrow.protocol.LoginUser;
2626
import com.sparrow.protocol.LoginUserStatus;
2727
import com.sparrow.protocol.constant.SparrowError;
28+
import com.sparrow.utility.JSUtility;
2829
import com.sparrow.utility.StringUtility;
2930

3031
import java.io.IOException;
@@ -92,11 +93,13 @@ protected String sign(LoginUser loginUser, String secretKey) {
9293
String userInfo = this.json.toString(loginUser);
9394
String signature = Hmac.getInstance().getSHA1Base64(userInfo,
9495
this.getEncryptKey());
95-
return Base64.encodeBytes(userInfo.getBytes(StandardCharsets.UTF_8)) + "." + signature;
96+
String token = Base64.encodeBytes(userInfo.getBytes(StandardCharsets.UTF_8)) + "." + signature;
97+
return JSUtility.encodeURIComponent(token);
9698
}
9799

98100
@Override
99101
protected LoginUser verify(String token, String secretKey) throws BusinessException {
102+
token = JSUtility.decodeURIComponent(token);
100103
String[] tokens = token.split("\\.");
101104
Asserts.isTrue(tokens.length != 2, SparrowError.USER_TOKEN_ERROR);
102105
String userInfo = tokens[0];

Diff for: sparrow-data-source/src/main/java/com/sparrow/datasource/checker/ConnectionValidCheckerAdapter.java renamed to sparrow/src/main/java/com/sparrow/support/checker/ConnectionValidCheckerAdapter.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
package com.sparrow.datasource.checker;
17+
package com.sparrow.support.checker;
1818

1919
import com.sparrow.datasource.DataSourceValidChecker;
2020
import com.sparrow.utility.JDBCUtils;
@@ -48,7 +48,7 @@ public boolean isValid(DataSource dataSource, String query, int validationQueryT
4848
} finally {
4949
JDBCUtils.close(rs);
5050
JDBCUtils.close(stmt);
51-
// JDBCUtils.close(connection);
51+
JDBCUtils.close(connection);
5252
}
5353
}
5454

Diff for: sparrow/src/main/java/com/sparrow/support/web/AbstractLoginFilter.java

+3-12
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import java.util.List;
2828

2929
public abstract class AbstractLoginFilter implements Filter {
30-
private List<String> excludePatternList = new ArrayList<String>();
30+
protected List<String> excludePatternList = new ArrayList<String>();
3131
protected Boolean supportTemplate;
32-
protected String apiPrefix;
32+
protected List<String> ajaxPatternList = new ArrayList<String>();
3333

3434
@Override
3535
public void init(FilterConfig config) throws ServletException {
@@ -45,15 +45,6 @@ public void init(FilterConfig config) throws ServletException {
4545
}
4646

4747
public Boolean isAjax(HttpServletRequest request) {
48-
return ServletUtility.getInstance().isAjax(request, this.supportTemplate, this.apiPrefix);
49-
}
50-
51-
public boolean matchExcludePatterns(String path) {
52-
for (String pattern : this.excludePatternList) {
53-
if (path.matches(pattern)) {
54-
return true;
55-
}
56-
}
57-
return false;
48+
return ServletUtility.getInstance().isAjax(request, this.supportTemplate, this.ajaxPatternList);
5849
}
5950
}

Diff for: sparrow/src/main/java/com/sparrow/support/web/CookieUtility.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package com.sparrow.support.web;
1919

2020
import com.sparrow.constant.Config;
21-
import com.sparrow.constant.User;
2221
import com.sparrow.utility.ConfigUtility;
2322
import com.sparrow.utility.JSUtility;
2423
import com.sparrow.utility.StringUtility;
@@ -76,7 +75,7 @@ public static String get(Cookie[] cookies, String key) {
7675
return null;
7776
}
7877

79-
public static String getPermission(HttpServletRequest request) {
80-
return get(request.getCookies(), User.PERMISSION);
78+
public static String getPermission(HttpServletRequest request,String tokenKey) {
79+
return get(request.getCookies(),tokenKey);
8180
}
8281
}

Diff for: sparrow/src/main/java/com/sparrow/support/web/LoginUserFilter.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.sparrow.protocol.ThreadContext;
2525
import com.sparrow.protocol.constant.Constant;
2626
import com.sparrow.utility.ConfigUtility;
27+
import com.sparrow.utility.RegexUtility;
2728
import com.sparrow.utility.StringUtility;
2829
import org.slf4j.Logger;
2930
import org.slf4j.LoggerFactory;
@@ -34,13 +35,15 @@
3435
import javax.servlet.ServletResponse;
3536
import javax.servlet.http.HttpServletRequest;
3637
import java.io.IOException;
38+
import java.util.List;
3739

3840
/**
3941
* 分布式场景下,从请求头中获取登录用户信息
4042
*/
4143
public class LoginUserFilter extends AbstractLoginFilter {
42-
public LoginUserFilter(Boolean mockLoginUser) {
44+
public LoginUserFilter(Boolean mockLoginUser, List<String> excludePatternList) {
4345
this.mockLoginUser = mockLoginUser;
46+
this.excludePatternList = excludePatternList;
4447
}
4548

4649
private static Logger logger = LoggerFactory.getLogger(LoginUserFilter.class);
@@ -53,7 +56,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
5356
if (servletRequest instanceof HttpServletRequest) {
5457
HttpServletRequest req = (HttpServletRequest) servletRequest;
5558
String currentUrl = req.getServletPath();
56-
if (this.matchExcludePatterns(currentUrl)) {
59+
if (RegexUtility.matchPatterns(this.excludePatternList,currentUrl)) {
5760
filterChain.doFilter(servletRequest, servletResponse);
5861
return;
5962
}

Diff for: sparrow/src/main/java/com/sparrow/support/web/MonolithicLoginUserFilter.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.sparrow.protocol.constant.magic.Symbol;
2828
import com.sparrow.support.Authenticator;
2929
import com.sparrow.utility.ConfigUtility;
30+
import com.sparrow.utility.RegexUtility;
3031
import com.sparrow.utility.StringUtility;
3132
import org.slf4j.Logger;
3233
import org.slf4j.LoggerFactory;
@@ -38,6 +39,7 @@
3839
import javax.servlet.http.HttpServletRequest;
3940
import javax.servlet.http.HttpServletResponse;
4041
import java.io.IOException;
42+
import java.util.List;
4143

4244
/**
4345
* 单体应用解析,需要签名认证
@@ -49,11 +51,13 @@ public MonolithicLoginUserFilter(Authenticator authenticator,
4951
Boolean mockLoginUser,
5052
String tokenKey,
5153
Boolean supportTemplate,
52-
String apiPrefix) {
54+
List<String> excludePatternList,
55+
List<String> ajaxPatternList) {
5356
this.authenticator = authenticator;
5457
this.mockLoginUser = mockLoginUser;
5558
this.supportTemplate = supportTemplate;
56-
this.apiPrefix = apiPrefix;
59+
this.ajaxPatternList = ajaxPatternList;
60+
this.excludePatternList = excludePatternList;
5761
if (StringUtility.isNullOrEmpty(tokenKey)) {
5862
this.tokenKey = Constant.REQUEST_HEADER_KEY_LOGIN_TOKEN;
5963
} else {
@@ -120,15 +124,15 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
120124
HttpServletResponse rep = (HttpServletResponse) servletResponse;
121125

122126
String currentUrl = req.getServletPath();
123-
if (this.matchExcludePatterns(currentUrl)) {
127+
if (RegexUtility.matchPatterns(this.excludePatternList,currentUrl)) {
124128
filterChain.doFilter(servletRequest, servletResponse);
125129
return;
126130
}
127131
String loginToken = req.getHeader(tokenKey);//密文
128132
LoginUser loginUser = null;
129133
//token 在header 里没拿到
130134
if (StringUtility.isNullOrEmpty(loginToken)) {
131-
loginToken = CookieUtility.getPermission(req);
135+
loginToken = CookieUtility.getPermission(req,tokenKey);
132136
}
133137
//token 没拿到
134138
if (!StringUtility.isNullOrEmpty(loginToken)) {

Diff for: sparrow/src/main/java/com/sparrow/support/web/ServletUtility.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
import com.sparrow.protocol.constant.Constant;
2323
import com.sparrow.protocol.constant.Extension;
2424
import com.sparrow.protocol.constant.magic.Symbol;
25+
import com.sparrow.utility.CollectionsUtility;
2526
import com.sparrow.utility.ConfigUtility;
27+
import com.sparrow.utility.RegexUtility;
2628
import com.sparrow.utility.StringUtility;
2729

2830
import java.util.Enumeration;
31+
import java.util.List;
2932
import javax.servlet.ServletRequest;
3033
import javax.servlet.http.HttpServletRequest;
3134

@@ -169,15 +172,15 @@ public String referer(HttpServletRequest request) {
169172
return request.getHeader("Referer");
170173
}
171174

172-
public boolean isAjax(HttpServletRequest request, boolean supportTemplate, String apiPrefix) {
175+
public boolean isAjax(HttpServletRequest request, boolean supportTemplate, List<String> ajaxPattens) {
173176
//非模板引擎,直接返回json
174177
if (!supportTemplate) {
175178
return true;
176179
}
177180
//支持模板引擎,判断URL前缀,如果是api前缀,则返回json
178-
if (!StringUtility.isNullOrEmpty(apiPrefix)) {
181+
if (!CollectionsUtility.isNullOrEmpty(ajaxPattens)) {
179182
String uri = request.getRequestURI();
180-
return uri.startsWith(apiPrefix);
183+
return RegexUtility.matchPatterns(ajaxPattens, uri);
181184
}
182185
//如果请求参数中明确指定了isAjax,则返回json
183186
String ajax = request.getHeader(Constant.IS_AJAX);

Diff for: sparrow/src/main/java/com/sparrow/utility/FileUtility.java

+31
Original file line numberDiff line numberDiff line change
@@ -646,4 +646,35 @@ public void recurseCopy(String source, String target, FileCopier fileCopier, Fol
646646
recurseCopy(source, target, fileCopier, folderFilter);
647647
}
648648
}
649+
650+
public void recurseFiles(List<String> files, String path, String suffix) {
651+
File sourceFile = new File(path);
652+
if (!sourceFile.exists()) {
653+
logger.error("{} source is not exist", path);
654+
return;
655+
}
656+
if (sourceFile.isFile()) {
657+
if (suffix == null || sourceFile.getName().endsWith(suffix)) {
658+
files.add(sourceFile.getAbsolutePath());
659+
}
660+
return;
661+
}
662+
//获取目录下的所有文件
663+
File[] fileList = sourceFile.listFiles();
664+
665+
if (fileList == null || fileList.length == 0) {
666+
logger.error("{} source is empty", path);
667+
return;
668+
}
669+
670+
for (java.io.File f : fileList) {
671+
String source = f.toString();
672+
if (f.isFile() && (suffix == null || f.getName().endsWith(suffix))) {
673+
files.add(source);
674+
}
675+
if (f.isDirectory()) {
676+
recurseFiles(files, source, suffix);
677+
}
678+
}
679+
}
649680
}

Diff for: sparrow/src/main/java/com/sparrow/utility/RegexUtility.java

+23-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static List<String> groups(String source, String regex) {
5454
regex = StringUtility.replace(regex, Constant.REPLACE_MAP);
5555
}
5656
Pattern p = Pattern
57-
.compile(regex, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
57+
.compile(regex, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
5858
Matcher m = p.matcher(source);
5959
List<String> groupList = null;
6060
if (!m.find()) {
@@ -72,7 +72,7 @@ public static List<List<String>> multiGroups(String source, String regex) {
7272
regex = StringUtility.replace(regex, Constant.REPLACE_MAP);
7373
}
7474
Pattern p = Pattern
75-
.compile(regex, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
75+
.compile(regex, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
7676
Matcher m = p.matcher(source);
7777
List<List<String>> multiGroupList = new ArrayList<List<String>>();
7878
while (m.find()) {
@@ -93,7 +93,7 @@ public static Pair<String, List<String>> getActionRegex(String actionKey) {
9393
String configParameter = "(\\{[a-z0-9]*\\})";
9494
String digitalAndLetter = "([a-z0-9\\-]*)";
9595
Pattern p = Pattern
96-
.compile(configParameter, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
96+
.compile(configParameter, Regex.OPTION_MULTILINE_CASE_INSENSITIVE);
9797
Matcher m = p.matcher(actionKey);
9898
String urlRegex = actionKey;
9999
List<String> parameters = new ArrayList<String>();
@@ -107,4 +107,24 @@ public static Pair<String, List<String>> getActionRegex(String actionKey) {
107107
}
108108
return Pair.create(urlRegex, parameters);
109109
}
110+
111+
public static boolean matchPatterns(List<String> patternList, String path) {
112+
for (String pattern : patternList) {
113+
if (path.matches(pattern)) {
114+
return true;
115+
}
116+
}
117+
return false;
118+
}
119+
120+
public static List<String> adapterWildcard(List<String> regexList) {
121+
if (regexList == null || regexList.isEmpty()) {
122+
return null;
123+
}
124+
List<String> newPatterns = new ArrayList<>();
125+
for (String pattern : regexList) {
126+
newPatterns.add(pattern.replace("*", ".*"));
127+
}
128+
return newPatterns;
129+
}
110130
}

0 commit comments

Comments
 (0)