Skip to content

Commit d84b199

Browse files
authored
Merge pull request #20 from yinjihuan/encrypt1.1
支持spring boot配置
2 parents 1162cf6 + 72dffe3 commit d84b199

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+798
-132
lines changed

.gitignore

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# maven ignore
22
target/
3-
bin/
43
*.jar
54
*.war
65
*.zip

encrypt-core/.gitignore

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# maven ignore
2+
target/
3+
*.jar
4+
*.war
5+
*.zip
6+
*.tar
7+
*.tar.gz
8+
9+
# eclipse ignore
10+
.settings/
11+
.project
12+
.classpath
13+
14+
# idea ignore
15+
.idea/
16+
*.ipr
17+
*.iml
18+
*.iws
19+
20+
# temp ignore
21+
*.log
22+
*.cache
23+
*.diff
24+
*.patch
25+
*.tmp
26+
*.java~
27+
*.properties~
28+
*.xml~
29+
30+
# system ignore
31+
.DS_Store
32+
Thumbs.db

encrypt-core/.project

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
<arguments>
1616
</arguments>
1717
</buildCommand>
18+
<buildCommand>
19+
<name>org.springframework.ide.eclipse.boot.validation.springbootbuilder</name>
20+
<arguments>
21+
</arguments>
22+
</buildCommand>
1823
</buildSpec>
1924
<natures>
2025
<nature>org.eclipse.jdt.core.javanature</nature>

encrypt-core/pom.xml

+45
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,50 @@
3737
<artifactId>slf4j-api</artifactId>
3838
<version>1.7.21</version>
3939
</dependency>
40+
<dependency>
41+
<groupId>org.springframework</groupId>
42+
<artifactId>spring-context</artifactId>
43+
<version>5.0.10.RELEASE</version>
44+
<scope>provided</scope>
45+
</dependency>
46+
<dependency>
47+
<groupId>org.springframework</groupId>
48+
<artifactId>spring-web</artifactId>
49+
<version>5.0.10.RELEASE</version>
50+
<scope>provided</scope>
51+
</dependency>
52+
<dependency>
53+
<groupId>org.springframework.boot</groupId>
54+
<artifactId>spring-boot-autoconfigure</artifactId>
55+
<version>2.0.6.RELEASE</version>
56+
<scope>provided</scope>
57+
</dependency>
4058
</dependencies>
59+
<build>
60+
<plugins>
61+
<plugin>
62+
<groupId>org.apache.maven.plugins</groupId>
63+
<artifactId>maven-compiler-plugin</artifactId>
64+
<configuration>
65+
<source>1.8</source>
66+
<target>1.8</target>
67+
</configuration>
68+
</plugin>
69+
<plugin>
70+
<artifactId>maven-source-plugin</artifactId>
71+
<version>2.1</version>
72+
<configuration>
73+
<attach>true</attach>
74+
</configuration>
75+
<executions>
76+
<execution>
77+
<phase>compile</phase>
78+
<goals>
79+
<goal>jar</goal>
80+
</goals>
81+
</execution>
82+
</executions>
83+
</plugin>
84+
</plugins>
85+
</build>
4186
</project>

encrypt-core/src/main/java/com/cxytiandi/encrypt/core/EncryptionConfig.java

+38
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import java.util.ArrayList;
44
import java.util.List;
55

6+
import org.springframework.boot.context.properties.ConfigurationProperties;
7+
8+
import com.cxytiandi.encrypt.springboot.init.ApiEncryptDataInit;
9+
610
/**
711
* 加解密配置类
812
*
@@ -13,6 +17,7 @@
1317
* @about http://cxytiandi.com/about
1418
*
1519
*/
20+
@ConfigurationProperties(prefix = "spring.encrypt")
1621
public class EncryptionConfig {
1722

1823
/**
@@ -44,6 +49,16 @@ public class EncryptionConfig {
4449
*/
4550
private boolean debug = false;
4651

52+
/**
53+
* 过滤器拦截模式
54+
*/
55+
private String[] urlPatterns = new String[] { "/*" };
56+
57+
/**
58+
* 过滤器执行顺序
59+
*/
60+
private int order = 1;
61+
4762
public EncryptionConfig() {
4863
super();
4964
}
@@ -67,6 +82,10 @@ public void setKey(String key) {
6782
}
6883

6984
public List<String> getResponseEncryptUriList() {
85+
// 配置了注解则用注解获取的URI
86+
if (ApiEncryptDataInit.responseEncryptUriList.size() > 0) {
87+
return ApiEncryptDataInit.responseEncryptUriList;
88+
}
7089
return responseEncryptUriList;
7190
}
7291

@@ -75,6 +94,10 @@ public void setResponseEncryptUriList(List<String> responseEncryptUriList) {
7594
}
7695

7796
public List<String> getRequestDecyptUriList() {
97+
// 配置了注解则用注解获取的URI
98+
if (ApiEncryptDataInit.requestDecyptUriList.size() > 0) {
99+
return ApiEncryptDataInit.requestDecyptUriList;
100+
}
78101
return requestDecyptUriList;
79102
}
80103

@@ -98,4 +121,19 @@ public void setDebug(boolean debug) {
98121
this.debug = debug;
99122
}
100123

124+
public void setUrlPatterns(String[] urlPatterns) {
125+
this.urlPatterns = urlPatterns;
126+
}
127+
128+
public String[] getUrlPatterns() {
129+
return urlPatterns;
130+
}
131+
132+
public void setOrder(int order) {
133+
this.order = order;
134+
}
135+
136+
public int getOrder() {
137+
return order;
138+
}
101139
}

encrypt-core/src/main/java/com/cxytiandi/encrypt/core/EncryptionFilter.java

+21-2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ public EncryptionFilter(EncryptionConfig config, EncryptAlgorithm encryptAlgorit
5050
this.encryptAlgorithm = encryptAlgorithm;
5151
}
5252

53+
public EncryptionFilter(String key) {
54+
EncryptionConfig config = new EncryptionConfig();
55+
config.setKey(key);
56+
this.encryptionConfig = config;
57+
}
58+
5359
public EncryptionFilter(String key, List<String> responseEncryptUriList, List<String> requestDecyptUriList,
5460
String responseCharset, boolean debug) {
5561
this.encryptionConfig = new EncryptionConfig(key, responseEncryptUriList, requestDecyptUriList, responseCharset, debug);
@@ -75,8 +81,9 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
7581
return;
7682
}
7783

78-
boolean decryptionStatus = encryptionConfig.getRequestDecyptUriList().contains(uri);
79-
boolean encryptionStatus = encryptionConfig.getResponseEncryptUriList().contains(uri);
84+
85+
boolean decryptionStatus = this.contains(encryptionConfig.getRequestDecyptUriList(), uri, req.getMethod());
86+
boolean encryptionStatus = this.contains(encryptionConfig.getResponseEncryptUriList(), uri, req.getMethod());
8087

8188
// 没有配置具体加解密的URI默认全部都开启加解密
8289
if (encryptionConfig.getRequestDecyptUriList().size() == 0
@@ -147,6 +154,18 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
147154

148155
}
149156

157+
private boolean contains(List<String> list, String uri, String methodType) {
158+
if (list.contains(uri)) {
159+
return true;
160+
}
161+
String prefixUri = methodType.toLowerCase() + ":" + uri;
162+
logger.debug("contains uri: {}", prefixUri);
163+
if (list.contains(prefixUri)) {
164+
return true;
165+
}
166+
return false;
167+
}
168+
150169
@Override
151170
public void destroy() {
152171

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.cxytiandi.encrypt.springboot;
2+
3+
public class HttpMethodTypePrefixConstant {
4+
5+
public static final String GET = "get:";
6+
7+
public static final String POST = "post:";
8+
9+
public static final String DELETE = "delete:";
10+
11+
public static final String PUT = "put:";
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.cxytiandi.encrypt.springboot.annotation;
2+
3+
import java.lang.annotation.Documented;
4+
import java.lang.annotation.ElementType;
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
import java.lang.annotation.Target;
8+
9+
/**
10+
* 解密注解
11+
*
12+
* <p>加了此注解的接口将进行数据解密操作<p>
13+
*
14+
* @author yinjihuan
15+
*
16+
* @about http://cxytiandi.com/about
17+
*
18+
*/
19+
@Target(ElementType.METHOD)
20+
@Retention(RetentionPolicy.RUNTIME)
21+
@Documented
22+
public @interface Decrypt {
23+
24+
String value() default "";
25+
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.cxytiandi.encrypt.springboot.annotation;
2+
3+
import java.lang.annotation.Documented;
4+
import java.lang.annotation.ElementType;
5+
import java.lang.annotation.Inherited;
6+
import java.lang.annotation.Retention;
7+
import java.lang.annotation.RetentionPolicy;
8+
import java.lang.annotation.Target;
9+
import org.springframework.context.annotation.Import;
10+
11+
import com.cxytiandi.encrypt.springboot.autoconfigure.EncryptAutoConfiguration;
12+
13+
/**
14+
* 启用加密Starter
15+
*
16+
* <p>在Spring Boot启动类上加上此注解<p>
17+
*
18+
* <pre class="code">
19+
* &#064;SpringBootApplication
20+
* &#064;EnableEncrypt
21+
* public class App {
22+
* public static void main(String[] args) {
23+
* SpringApplication.run(App.class, args);
24+
* }
25+
* }
26+
* <pre>
27+
*
28+
* @author yinjihuan
29+
*
30+
* @about http://cxytiandi.com/about
31+
*/
32+
@Target({ElementType.TYPE})
33+
@Retention(RetentionPolicy.RUNTIME)
34+
@Documented
35+
@Inherited
36+
@Import({EncryptAutoConfiguration.class})
37+
public @interface EnableEncrypt {
38+
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.cxytiandi.encrypt.springboot.annotation;
2+
3+
import java.lang.annotation.Documented;
4+
import java.lang.annotation.ElementType;
5+
import java.lang.annotation.Retention;
6+
import java.lang.annotation.RetentionPolicy;
7+
import java.lang.annotation.Target;
8+
9+
/**
10+
* 加密注解
11+
*
12+
* <p>加了此注解的接口将进行数据加密操作<p>
13+
*
14+
* @author yinjihuan
15+
*
16+
* @about http://cxytiandi.com/about
17+
*/
18+
@Target(ElementType.METHOD)
19+
@Retention(RetentionPolicy.RUNTIME)
20+
@Documented
21+
public @interface Encrypt {
22+
23+
String value() default "";
24+
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.cxytiandi.encrypt.springboot.autoconfigure;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
5+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
6+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
10+
import com.cxytiandi.encrypt.core.EncryptionConfig;
11+
import com.cxytiandi.encrypt.core.EncryptionFilter;
12+
import com.cxytiandi.encrypt.springboot.init.ApiEncryptDataInit;
13+
14+
15+
/**
16+
* 加解密自动配置
17+
*
18+
* @author yinjihuan
19+
*
20+
* @about http://cxytiandi.com/about
21+
*
22+
*/
23+
@Configuration
24+
@EnableAutoConfiguration
25+
@EnableConfigurationProperties(EncryptionConfig.class)
26+
public class EncryptAutoConfiguration {
27+
28+
@Autowired
29+
private EncryptionConfig encryptionConfig;
30+
31+
/**
32+
* 不要用泛型注册Filter,泛型在Spring Boot 2.x版本中才有
33+
* @return
34+
*/
35+
@SuppressWarnings({ "rawtypes", "unchecked" })
36+
@Bean
37+
public FilterRegistrationBean filterRegistration() {
38+
EncryptionConfig config = new EncryptionConfig();
39+
config.setKey(encryptionConfig.getKey());
40+
config.setRequestDecyptUriList(encryptionConfig.getRequestDecyptUriList());
41+
config.setResponseEncryptUriList(encryptionConfig.getResponseEncryptUriList());
42+
FilterRegistrationBean registration = new FilterRegistrationBean();
43+
registration.setFilter(new EncryptionFilter(config));
44+
registration.addUrlPatterns(encryptionConfig.getUrlPatterns());
45+
registration.setName("EncryptionFilter");
46+
registration.setOrder(encryptionConfig.getOrder());
47+
return registration;
48+
}
49+
50+
@Bean
51+
public ApiEncryptDataInit apiEncryptDataInit() {
52+
return new ApiEncryptDataInit();
53+
}
54+
}

0 commit comments

Comments
 (0)