1111import javax .servlet .http .HttpServletResponse ;
1212
1313/**
14- * @author JoyChou ([email protected] ) 15- * @date 2018.10.24
16- * @desc https://github.com/JoyChou93/java-sec-code/wiki/CORS
14+ * @author JoyChou ([email protected] ) @2018.10.24 15+ * https://github.com/JoyChou93/java-sec-code/wiki/CORS
1716 */
1817
1918@ RestController
2019@ RequestMapping ("/cors" )
2120public class Cors {
2221
23- protected static String info = "{\" name\" : \" JoyChou\" , \" phone\" : \" 18200001111\" }" ;
24- protected static String [] urlwhitelist = {"joychou.com" , "joychou.me" };
22+ private static String info = "{\" name\" : \" JoyChou\" , \" phone\" : \" 18200001111\" }" ;
23+ private static String [] urlwhitelist = {"joychou.org" , "joychou.me" };
24+
2525
2626 @ RequestMapping ("/vuln/origin" )
27- private static String vuls1 (HttpServletRequest request , HttpServletResponse response ) {
27+ public static String vuls1 (HttpServletRequest request , HttpServletResponse response ) {
2828 String origin = request .getHeader ("origin" );
2929 response .setHeader ("Access-Control-Allow-Origin" , origin ); // 设置Origin值为Header中获取到的
3030 response .setHeader ("Access-Control-Allow-Credentials" , "true" ); // cookie
3131 return info ;
3232 }
3333
3434 @ RequestMapping ("/vuln/setHeader" )
35- private static String vuls2 (HttpServletResponse response ) {
35+ public static String vuls2 (HttpServletResponse response ) {
3636 // 后端设置Access-Control-Allow-Origin为*的情况下,跨域的时候前端如果设置withCredentials为true会异常
3737 response .setHeader ("Access-Control-Allow-Origin" , "*" );
3838 return info ;
@@ -41,40 +41,67 @@ private static String vuls2(HttpServletResponse response) {
4141
4242 @ CrossOrigin ("*" )
4343 @ RequestMapping ("/vuln/crossOrigin" )
44- private static String vuls3 (HttpServletResponse response ) {
44+ public static String vuls3 () {
45+ return info ;
46+ }
47+
48+
49+ /**
50+ * 重写Cors的checkOrigin校验方法
51+ * 支持自定义checkOrigin,让其额外支持一级域名
52+ * 代码:org/joychou/security/CustomCorsProcessor
53+ */
54+ @ CrossOrigin (origins = {"joychou.org" , "http://test.joychou.me" })
55+ @ RequestMapping ("/sec/crossOrigin" )
56+ public static String secCrossOrigin () {
4557 return info ;
4658 }
4759
4860
49- // https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/config/webMvcConfigurer.java
61+ /**
62+ * WebMvcConfigurer设置Cors
63+ * 支持自定义checkOrigin
64+ * 代码:org/joychou/config/CorsConfig.java
65+ */
5066 @ RequestMapping ("/sec/webMvcConfigurer" )
5167 public CsrfToken getCsrfToken_01 (CsrfToken token ) {
5268 return token ;
5369 }
5470
5571
56- // https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java
72+ /**
73+ * spring security设置cors
74+ * 不支持自定义checkOrigin,因为spring security优先于setCorsProcessor执行
75+ * 代码:org/joychou/security/WebSecurityConfig.java
76+ */
5777 @ RequestMapping ("/sec/httpCors" )
5878 public CsrfToken getCsrfToken_02 (CsrfToken token ) {
5979 return token ;
6080 }
6181
6282
63- // https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/filter/SecCorsFilter.java
64- @ RequestMapping ("/sec/corsFitler" )
83+ /**
84+ * 自定义filter设置cors
85+ * 支持自定义checkOrigin
86+ * 代码:org/joychou/filter/OriginFilter.java
87+ */
88+ @ RequestMapping ("/sec/originFilter" )
6589 public CsrfToken getCsrfToken_03 (CsrfToken token ) {
6690 return token ;
6791 }
6892
6993
70- // https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/filter/CorsFilter.java
71- @ RequestMapping ("/sec/Filter" )
94+ /**
95+ * CorsFilter设置cors。
96+ * 不支持自定义checkOrigin,因为corsFilter优先于setCorsProcessor执行
97+ * 代码:org/joychou/filter/BaseCorsFilter.java
98+ */
99+ @ RequestMapping ("/sec/corsFilter" )
72100 public CsrfToken getCsrfToken_04 (CsrfToken token ) {
73101 return token ;
74102 }
75103
76104
77- // http://localhost:8080/cors/sec/checkOrigin
78105 @ RequestMapping ("/sec/checkOrigin" )
79106 public String seccode (HttpServletRequest request , HttpServletResponse response ) {
80107 String origin = request .getHeader ("Origin" );
0 commit comments