Skip to content
This repository was archived by the owner on Mar 16, 2021. It is now read-only.

Commit cb5d62d

Browse files
committed
跨域请求处理优化
1 parent 3ee8ccc commit cb5d62d

File tree

9 files changed

+139
-36
lines changed

9 files changed

+139
-36
lines changed

src/main/java/com/seezoon/framework/common/context/filter/CorsFilter.java

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,47 @@
1212
import javax.servlet.http.HttpServletResponse;
1313

1414
import org.apache.commons.lang3.StringUtils;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
18+
import com.seezoon.framework.common.context.utils.PropertyUtil;
1519

1620
/**
1721
* 测试时候前后端分离 在web.xml 配置
18-
* @author hdf
19-
* 2018年4月7日
22+
*
23+
* @author hdf 2018年4月7日
2024
*/
2125
public class CorsFilter implements Filter {
2226

27+
protected Logger logger = LoggerFactory.getLogger(CorsFilter.class);
28+
private boolean cors = false;
29+
2330
@Override
2431
public void init(FilterConfig filterConfig) throws ServletException {
25-
32+
cors = PropertyUtil.getBoolean("cors.switch");
2633
}
2734

2835
@Override
2936
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
3037
throws IOException, ServletException {
31-
HttpServletResponse servletResponse = (HttpServletResponse) response;
32-
HttpServletRequest servletRequest = (HttpServletRequest)request;
33-
String origin = servletRequest.getHeader("Origin");
34-
if (StringUtils.isNotEmpty(origin)) {
35-
servletResponse.setHeader("Access-Control-Allow-Origin", origin);
36-
} else {
37-
servletResponse.setHeader("Access-Control-Allow-Origin", "*");
38+
if (cors) {
39+
logger.warn("-------- cors is turn on ----------");
40+
HttpServletResponse servletResponse = (HttpServletResponse) response;
41+
HttpServletRequest servletRequest = (HttpServletRequest) request;
42+
String origin = servletRequest.getHeader("Origin");
43+
if (StringUtils.isNotEmpty(origin)) {
44+
//允许客户端携带跨域cookie,此时origin值不能为“*”,只能为指定单一域名
45+
servletResponse.setHeader("Access-Control-Allow-Origin", origin);
46+
} else {
47+
servletResponse.setHeader("Access-Control-Allow-Origin", "*");
48+
}
49+
servletResponse.setHeader("Access-Control-Allow-Methods", "*");
50+
servletResponse.setHeader("Access-Control-Allow-Headers", "*,Content-Type");
51+
servletResponse.setHeader("Access-Control-Expose-Headers", "*");
52+
servletResponse.setHeader("Access-Control-Max-Age", "3600");
53+
servletResponse.setHeader("Access-Control-Allow-Credentials", "true");
3854
}
39-
servletResponse.setHeader("Access-Control-Allow-Methods", "*");
40-
servletResponse.setHeader("Access-Control-Allow-Headers", "*,Content-Type");
41-
servletResponse.setHeader("Access-Control-Expose-Headers", "*");
42-
servletResponse.setHeader("Access-Control-Max-Age", "3600");
43-
servletResponse.setHeader("Access-Control-Allow-Credentials", "true");
44-
chain.doFilter(request, servletResponse);
55+
chain.doFilter(request, response);
4556
}
4657

4758
@Override
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.seezoon.framework.common.context.utils;
2+
3+
import org.apache.commons.configuration.Configuration;
4+
import org.apache.commons.configuration.ConfigurationException;
5+
import org.apache.commons.configuration.PropertiesConfiguration;
6+
7+
/**
8+
* 配置文件读取
9+
*
10+
* @author hdf 2018年4月19日
11+
*/
12+
public class PropertyUtil {
13+
14+
private static Configuration config = null;
15+
16+
static {
17+
try {
18+
// 默认从classpath 根路径开始
19+
config = new PropertiesConfiguration("application.properties");
20+
} catch (ConfigurationException e) {
21+
throw new RuntimeException(e);
22+
}
23+
}
24+
25+
public static boolean getBoolean(String key) {
26+
return config.getBoolean(key, false);
27+
}
28+
29+
public static int getInteger(String key) {
30+
return config.getInteger(key, null);
31+
}
32+
33+
public static String getString(String key) {
34+
return config.getString(key, null);
35+
}
36+
}

src/main/java/com/seezoon/framework/common/file/FileConfig.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,49 @@
11
package com.seezoon.framework.common.file;
22

33
import org.springframework.beans.factory.annotation.Value;
4-
import org.springframework.stereotype.Component;
4+
5+
import com.seezoon.framework.common.context.utils.PropertyUtil;
56

67
/**
78
* 文件模块配置信息
89
*
910
* @author hdf 2018年4月15日
1011
*/
11-
@Component
1212
public class FileConfig {
1313

1414
/**
1515
* 存储介质 local= 本地,aliyun=阿里云
1616
*/
17-
@Value("${file.storage}")
18-
private String fileStorage;
17+
//@Value("${file.storage}")
18+
private String fileStorage = PropertyUtil.getString("file.storage");
1919
/**
2020
* 本地公网访问前缀
2121
*/
22-
@Value("${file.local.urlPrefix}")
23-
private String localUrlPrefix;
22+
//@Value("${file.local.urlPrefix}")
23+
private String localUrlPrefix = PropertyUtil.getString("file.local.urlPrefix");
2424
/**
2525
* 本地存储路径
2626
*/
27-
@Value("${file.local.storePath}")
28-
private String localStorePath;
27+
//@Value("${file.local.storePath}")
28+
private String localStorePath = PropertyUtil.getString("file.local.storePath");
2929

3030
/**
3131
* 阿里云公网访问前缀
3232
*/
33-
@Value("${file.aliyun.urlPrefix}")
34-
private String aliyunUrlPrefix;
33+
//@Value("${file.aliyun.urlPrefix}")
34+
private String aliyunUrlPrefix = PropertyUtil.getString("file.aliyun.urlPrefix");
3535
/**
3636
* 阿里云bucket 即存储路径
3737
*/
38-
@Value("${file.aliyun.bucket}")
39-
private String aliyunBucket;
38+
//@Value("${file.aliyun.bucket}")
39+
private String aliyunBucket = PropertyUtil.getString("file.aliyun.bucket");
4040

41-
@Value("${file.aliyun.endpoint}")
42-
private String aliyunEndpoint;
43-
@Value("${file.aliyun.accessKeyId}")
44-
private String aliyunAccessKeyId;
41+
//@Value("${file.aliyun.endpoint}")
42+
private String aliyunEndpoint = PropertyUtil.getString("file.aliyun.endpoint");
43+
//@Value("${file.aliyun.accessKeyId}")
44+
private String aliyunAccessKeyId = PropertyUtil.getString("file.aliyun.accessKeyId");
4545
@Value("${file.aliyun.accessKeySecret}")
46-
private String aliyunAccessKeySecret;
46+
private String aliyunAccessKeySecret = PropertyUtil.getString("file.aliyun.accessKeySecret");
4747

4848
public String getFileStorage() {
4949
return fileStorage;

src/main/java/com/seezoon/framework/common/file/FileHandlerFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import com.alibaba.fastjson.JSON;
88
import com.seezoon.framework.common.Constants;
9-
import com.seezoon.framework.common.context.support.SpringContextHolder;
109
import com.seezoon.framework.common.file.handler.AliFileFileHandler;
1110
import com.seezoon.framework.common.file.handler.FileHandler;
1211
import com.seezoon.framework.common.file.handler.LocalFileHandler;
@@ -17,7 +16,7 @@ public class FileHandlerFactory {
1716
private static FileHandler fileHandler = null;
1817

1918
// 文件配置
20-
private static FileConfig fileConfig = SpringContextHolder.getBean(FileConfig.class);
19+
private static FileConfig fileConfig = new FileConfig();
2120

2221
public static FileHandler getHandler() {
2322
if (null != fileHandler) {

src/main/java/com/seezoon/framework/modules/system/shiro/FormAuthenticationFilter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import com.seezoon.framework.common.web.HttpStatus;
1414

1515
/**
16-
* 自定义shiro 登录filter 适合ajax 登录
16+
* 自定义shiro 登录filter
17+
* 账密未认证过会触发这个拦截器
18+
* 适合ajax 登录
1719
*
1820
* 自定义HTTP 请求头,310 未登录
1921
* @author hdf
@@ -39,4 +41,5 @@ protected boolean onAccessDenied(ServletRequest request, ServletResponse respons
3941
return false;
4042
//}
4143
}
44+
4245
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.seezoon.framework.modules.system.shiro;
2+
3+
import javax.servlet.ServletRequest;
4+
import javax.servlet.ServletResponse;
5+
import javax.servlet.http.HttpServletRequest;
6+
7+
import org.springframework.stereotype.Component;
8+
import org.springframework.web.bind.annotation.RequestMethod;
9+
10+
/**
11+
* 账密或者remember 的拦截器
12+
*
13+
* 解决在remember的情况下,跨域请求options 请求无法携带cookie 的问题
14+
*
15+
* @author hdf
16+
* 2018年4月19日
17+
*/
18+
@Component
19+
public class UserFilter extends org.apache.shiro.web.filter.authc.UserFilter {
20+
21+
@Override
22+
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
23+
HttpServletRequest req = (HttpServletRequest)request;
24+
//跨域的options 请求直接过
25+
if (RequestMethod.OPTIONS.name().equalsIgnoreCase(req.getMethod())) {
26+
return true;
27+
}
28+
return super.onAccessDenied(request, response);
29+
}
30+
31+
@Override
32+
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
33+
return super.isAccessAllowed(request, response, mappedValue);
34+
}
35+
}

src/main/resources/application.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
#\u7a0b\u5e8f\u8de8\u57df\uff0c\u6d4b\u8bd5\u65f6\u5019\u4e3a\u4e86\u65b9\u4fbf\u5f00\u542f\uff0c\u4e0a\u751f\u4ea7\u7f6e\u4e3afalse\uff0c\u5efa\u8bae\u5728ngnix \u4e0a\u914d\u7f6e\u8de8\u57df
2+
cors.switch=true
3+
cors.switch=
4+
15
#\u540e\u7aef\u63a5\u53e3\u8def\u5f84\u524d\u7f00
26
admin.path=/a
37
#\u524d\u7aef\u63a5\u53e3\u8def\u5f84\u524d\u7f00

src/main/resources/spring-context-shiro.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<property name="filters">
3737
<map>
3838
<entry key="authc" value-ref="formAuthenticationFilter" />
39+
<entry key="user" value-ref="userFilter" />
3940
</map>
4041
</property>
4142
<property name="filterChainDefinitions">
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.seezoon.framework.common.context.support;
2+
3+
import org.junit.Test;
4+
5+
import com.seezoon.framework.common.context.utils.PropertyUtil;
6+
7+
public class PropertyUtilTest {
8+
9+
@Test
10+
public void t1() {
11+
System.out.println(PropertyUtil.getBoolean("cors.switch1"));
12+
System.out.println(PropertyUtil.getString("cors.switch1"));
13+
}
14+
}

0 commit comments

Comments
 (0)