From 6851a9c9889f9107f139553bfee3383517d0d795 Mon Sep 17 00:00:00 2001 From: wangsong Date: Tue, 9 Mar 2021 12:21:57 +0800 Subject: [PATCH] m --- encode_resp/pom.xml | 50 +++++++++++++ .../encode_resp/EncodeRespApplication.java | 13 ++++ .../javaboy/encode_resp/HelloController.java | 37 ++++++++++ .../org/javaboy/encode_resp/model/User.java | 39 ++++++++++ .../src/main/resources/application.properties | 1 + .../EncodeRespApplicationTests.java | 13 ++++ encrypt-spring-boot-starter/pom.xml | 22 ++++++ .../javaboy/encrypt/starter/anno/Decrypt.java | 20 ++++++ .../javaboy/encrypt/starter/anno/Encrypt.java | 20 ++++++ .../autoconfig/EncryptAutoConfiguration.java | 19 +++++ .../encrypt/starter/model/RespBean.java | 72 +++++++++++++++++++ .../starter/prop/EncryptProperties.java | 26 +++++++ .../encrypt/starter/req/DecryptRequest.java | 62 ++++++++++++++++ .../encrypt/starter/resp/EncryptResponse.java | 53 ++++++++++++++ .../encrypt/starter/utils/AESUtils.java | 39 ++++++++++ .../main/resources/META-INF/spring.factories | 1 + .../src/main/resources/application.properties | 1 + .../javaboy/flash_map/OrderController.java | 5 ++ pathpattern/pom.xml | 41 +++++++++++ .../javaboy/pathpattern/HelloController.java | 21 ++++++ .../pathpattern/PathpatternApplication.java | 13 ++++ .../org/javaboy/pathpattern/WebConfig.java | 22 ++++++ .../src/main/resources/application.properties | 1 + .../PathpatternApplicationTests.java | 13 ++++ 24 files changed, 604 insertions(+) create mode 100644 encode_resp/pom.xml create mode 100644 encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java create mode 100644 encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java create mode 100644 encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java create mode 100644 encode_resp/src/main/resources/application.properties create mode 100644 encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java create mode 100644 encrypt-spring-boot-starter/pom.xml create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java create mode 100644 encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java create mode 100644 encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories create mode 100644 encrypt-spring-boot-starter/src/main/resources/application.properties create mode 100644 pathpattern/pom.xml create mode 100644 pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java create mode 100644 pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java create mode 100644 pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java create mode 100644 pathpattern/src/main/resources/application.properties create mode 100644 pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java diff --git a/encode_resp/pom.xml b/encode_resp/pom.xml new file mode 100644 index 0000000..3828e55 --- /dev/null +++ b/encode_resp/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.4.3 + + + org.javaboy + encode_resp + 0.0.1-SNAPSHOT + encode_resp + Demo project for Spring Boot + + 11 + + + + org.springframework.boot + spring-boot-starter-web + + + com.github.lenve + encrypt-spring-boot-starter + 0.0.3 + + + org.springframework.boot + spring-boot-starter-test + test + + + + + jitpack.io + https://jitpack.io + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java b/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java new file mode 100644 index 0000000..91b84e4 --- /dev/null +++ b/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.encode_resp; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EncodeRespApplication { + + public static void main(String[] args) { + SpringApplication.run(EncodeRespApplication.class, args); + } + +} diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java b/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java new file mode 100644 index 0000000..14e7025 --- /dev/null +++ b/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java @@ -0,0 +1,37 @@ +package org.javaboy.encode_resp; + +import org.javaboy.encode_resp.model.User; +import org.javaboy.encrypt.starter.anno.Decrypt; +import org.javaboy.encrypt.starter.anno.Encrypt; +import org.javaboy.encrypt.starter.model.RespBean; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class HelloController { + @GetMapping("/user") + @Encrypt + public RespBean getUser() { + User user = new User(); + user.setId((long) 99); + user.setUsername("javaboy"); + return RespBean.ok("ok", user); + } + + @PostMapping("/user") + public RespBean addUser(@RequestBody @Decrypt User user) { + System.out.println("user = " + user); + return RespBean.ok("ok", user); + } +} diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java b/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java new file mode 100644 index 0000000..6d08c14 --- /dev/null +++ b/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java @@ -0,0 +1,39 @@ +package org.javaboy.encode_resp.model; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class User { + private Long id; + private String username; + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + '}'; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } +} diff --git a/encode_resp/src/main/resources/application.properties b/encode_resp/src/main/resources/application.properties new file mode 100644 index 0000000..20d9c09 --- /dev/null +++ b/encode_resp/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.encrypt.key=1234567890123456 \ No newline at end of file diff --git a/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java b/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java new file mode 100644 index 0000000..7124f34 --- /dev/null +++ b/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.encode_resp; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class EncodeRespApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/encrypt-spring-boot-starter/pom.xml b/encrypt-spring-boot-starter/pom.xml new file mode 100644 index 0000000..0444b2f --- /dev/null +++ b/encrypt-spring-boot-starter/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + org.javaboy + encrypt-spring-boot-starter + 0.0.1 + encrypt-spring-boot-starter + SpringBoot加密工具类 + + 11 + + + + org.springframework.boot + spring-boot-starter-web + provided + 2.4.3 + + + + diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java new file mode 100644 index 0000000..03a71dd --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java @@ -0,0 +1,20 @@ +package org.javaboy.encrypt.starter.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD,ElementType.PARAMETER}) +public @interface Decrypt { +} diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java new file mode 100644 index 0000000..463d346 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java @@ -0,0 +1,20 @@ +package org.javaboy.encrypt.starter.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Encrypt { +} diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java new file mode 100644 index 0000000..1b260cc --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java @@ -0,0 +1,19 @@ +package org.javaboy.encrypt.starter.autoconfig; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +@ComponentScan("org.javaboy.encrypt.starter") +public class EncryptAutoConfiguration { + +} \ No newline at end of file diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java new file mode 100644 index 0000000..9fcdcb2 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java @@ -0,0 +1,72 @@ +package org.javaboy.encrypt.starter.model; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class RespBean { + private Integer status; + private String msg; + private Object obj; + + public static RespBean build() { + return new RespBean(); + } + + public static RespBean ok(String msg) { + return new RespBean(200, msg, null); + } + + public static RespBean ok(String msg, Object obj) { + return new RespBean(200, msg, obj); + } + + public static RespBean error(String msg) { + return new RespBean(500, msg, null); + } + + public static RespBean error(String msg, Object obj) { + return new RespBean(500, msg, obj); + } + + private RespBean() { + } + + private RespBean(Integer status, String msg, Object obj) { + this.status = status; + this.msg = msg; + this.obj = obj; + } + + public Integer getStatus() { + return status; + } + + public RespBean setStatus(Integer status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public RespBean setMsg(String msg) { + this.msg = msg; + return this; + } + + public Object getObj() { + return obj; + } + + public RespBean setObj(Object obj) { + this.obj = obj; + return this; + } +} \ No newline at end of file diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java new file mode 100644 index 0000000..1c3596b --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java @@ -0,0 +1,26 @@ +package org.javaboy.encrypt.starter.prop; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@ConfigurationProperties(prefix = "spring.encrypt") +public class EncryptProperties { + private final static String DEFAULT_KEY = "www.itboyhub.com"; + private String key = DEFAULT_KEY; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } +} diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java new file mode 100644 index 0000000..90d2ab8 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java @@ -0,0 +1,62 @@ +package org.javaboy.encrypt.starter.req; + +import org.javaboy.encrypt.starter.anno.Decrypt; +import org.javaboy.encrypt.starter.prop.EncryptProperties; +import org.javaboy.encrypt.starter.utils.AESUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.core.MethodParameter; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Type; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@EnableConfigurationProperties(EncryptProperties.class) +@ControllerAdvice +public class DecryptRequest extends RequestBodyAdviceAdapter { + @Autowired + EncryptProperties encryptProperties; + @Override + public boolean supports(MethodParameter methodParameter, Type targetType, Class> converterType) { + return methodParameter.hasMethodAnnotation(Decrypt.class) || methodParameter.hasParameterAnnotation(Decrypt.class); + } + + @Override + public HttpInputMessage beforeBodyRead(final HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) throws IOException { + byte[] body = new byte[inputMessage.getBody().available()]; + inputMessage.getBody().read(body); + try { + byte[] decrypt = AESUtils.decrypt(body, encryptProperties.getKey().getBytes()); + final ByteArrayInputStream bais = new ByteArrayInputStream(decrypt); + return new HttpInputMessage() { + @Override + public InputStream getBody() throws IOException { + return bais; + } + + @Override + public HttpHeaders getHeaders() { + return inputMessage.getHeaders(); + } + }; + } catch (Exception e) { + e.printStackTrace(); + } + return super.beforeBodyRead(inputMessage, parameter, targetType, converterType); + } +} diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java new file mode 100644 index 0000000..7ebedd6 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java @@ -0,0 +1,53 @@ +package org.javaboy.encrypt.starter.resp; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.javaboy.encrypt.starter.anno.Encrypt; +import org.javaboy.encrypt.starter.model.RespBean; +import org.javaboy.encrypt.starter.prop.EncryptProperties; +import org.javaboy.encrypt.starter.utils.AESUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@EnableConfigurationProperties(EncryptProperties.class) +@ControllerAdvice +public class EncryptResponse implements ResponseBodyAdvice { + private ObjectMapper om = new ObjectMapper(); + @Autowired + EncryptProperties encryptProperties; + @Override + public boolean supports(MethodParameter returnType, Class> converterType) { + return returnType.hasMethodAnnotation(Encrypt.class); + } + + @Override + public RespBean beforeBodyWrite(RespBean body, MethodParameter returnType, MediaType selectedContentType, Class> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { + byte[] keyBytes = encryptProperties.getKey().getBytes(); + try { + if (body.getMsg()!=null) { + body.setMsg(AESUtils.encrypt(body.getMsg().getBytes(),keyBytes)); + } + if (body.getObj() != null) { + body.setObj(AESUtils.encrypt(om.writeValueAsBytes(body.getObj()), keyBytes)); + } + } catch (Exception e) { + e.printStackTrace(); + } + return body; + } +} diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java new file mode 100644 index 0000000..8bc433b --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java @@ -0,0 +1,39 @@ +package org.javaboy.encrypt.starter.utils; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.util.Base64; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +public class AESUtils { + + private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding"; + + // 获取 cipher + private static Cipher getCipher(byte[] key, int model) throws Exception { + SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); + Cipher cipher = Cipher.getInstance(AES_ALGORITHM); + cipher.init(model, secretKeySpec); + return cipher; + } + + // AES加密 + public static String encrypt(byte[] data, byte[] key) throws Exception { + Cipher cipher = getCipher(key, Cipher.ENCRYPT_MODE); + return Base64.getEncoder().encodeToString(cipher.doFinal(data)); + } + + // AES解密 + public static byte[] decrypt(byte[] data, byte[] key) throws Exception { + Cipher cipher = getCipher(key, Cipher.DECRYPT_MODE); + return cipher.doFinal(Base64.getDecoder().decode(data)); + } +} \ No newline at end of file diff --git a/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories b/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..99dfa43 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.encrypt.starter.autoconfig.EncryptAutoConfiguration \ No newline at end of file diff --git a/encrypt-spring-boot-starter/src/main/resources/application.properties b/encrypt-spring-boot-starter/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/encrypt-spring-boot-starter/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java b/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java index 422ce76..230a2e5 100644 --- a/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java +++ b/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java @@ -1,6 +1,7 @@ package org.javaboy.flash_map; import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath; +import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -15,6 +16,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; /** * @author 江南一点雨 @@ -29,11 +32,13 @@ public class OrderController { @PostMapping("/order") public String order(HttpServletRequest req) { + FlashMap flashMap = (FlashMap) req.getAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE); flashMap.put("site", "www.javaboy.org"); flashMap.addTargetRequestParam("aa", "bb"); // attr.addFlashAttribute("site", "www.javaboy.org"); // attr.addAttribute("name", "微信公众号:江南一点雨"); +// Locale locale = LocaleContextHolder.getLocale(); return "redirect:/orderlist?aa=bb"; } diff --git a/pathpattern/pom.xml b/pathpattern/pom.xml new file mode 100644 index 0000000..a55b630 --- /dev/null +++ b/pathpattern/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.4.3 + + + org.javaboy + pathpattern + 0.0.1-SNAPSHOT + pathpattern + Demo project for Spring Boot + + 11 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java b/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java new file mode 100644 index 0000000..3ea8596 --- /dev/null +++ b/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java @@ -0,0 +1,21 @@ +package org.javaboy.pathpattern; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@RestController +public class HelloController { + @GetMapping("/hello") + public String hello() { + return "hello"; + } +} diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java b/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java new file mode 100644 index 0000000..6401aa6 --- /dev/null +++ b/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java @@ -0,0 +1,13 @@ +package org.javaboy.pathpattern; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PathpatternApplication { + + public static void main(String[] args) { + SpringApplication.run(PathpatternApplication.class, args); + } + +} diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java b/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java new file mode 100644 index 0000000..c9c49c5 --- /dev/null +++ b/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java @@ -0,0 +1,22 @@ +package org.javaboy.pathpattern; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author 江南一点雨 + * @微信公众号 江南一点雨 + * @网站 http://www.itboyhub.com + * @国际站 http://www.javaboy.org + * @微信 a_java_boy + * @GitHub https://github.com/lenve + * @Gitee https://gitee.com/lenve + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void configurePathMatch(PathMatchConfigurer configurer) { + configurer.setUseTrailingSlashMatch(true); + } +} diff --git a/pathpattern/src/main/resources/application.properties b/pathpattern/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/pathpattern/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java b/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java new file mode 100644 index 0000000..96b2f9e --- /dev/null +++ b/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java @@ -0,0 +1,13 @@ +package org.javaboy.pathpattern; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class PathpatternApplicationTests { + + @Test + void contextLoads() { + } + +}