我正在将加密的String作为Query参数获取到Spring rest控制器方法。
我想在字符串到达基于一些注解(比如@Decrypt
)的方法之前对其进行解密,如下所示
@RequestMapping(value = "/customer", method = RequestMethod.GET)
public String getAppointmentsForDay(@RequestParam("secret") @Decrypt String customerSecret) {
System.out.println(customerSecret); // Needs to be a decrypted value.
...
}
字符串
在这个用例中,定制的Formatter
是正确的方法吗?
或者我应该使用自定义HandlerMethodArgumentResolver
?
4条答案
按热度按时间carvr3hs1#
org.springframework.format.Formatter
的自定义实现是此用例的有效方法。这就是Spring本身如何实现日期,货币,数字样式等的格式化程序。步骤:
1.声明注解:
Decrypt
:字符串
1.声明一个使用新注解的
AnnotationFormatterFactory
:型
1.将此格式化程序工厂注册到您的Web上下文:
型
1.就这样了
有了上面的内容,所有使用
@Decrypt
限定的@RequestParam
都将通过DecryptAnnotationFormatterFactory
中声明的parse()
方法传递,因此您可以在那里实现解密调用。为了证明这一点,以下测试通过:
型
9udxz4iz2#
HandlerMethodArgumentResolver在这方面是最好的。
1.创建注解:
字符串
1.创建自定义HandlerMethodArgumentResolver:
型
1.注册冲突解决程序:
型
1.瞧,你有你的解密参数。请注意,您不再需要使用@RequestParam。
型
qjp7pelc3#
您可以尝试在
web.xml
文件中添加CharacterEncodingFilter
和init-param
encoding
UTF-8
。查看this example。但是如果仍然不起作用,您可以通过添加下面的参数沿着上面的
init-param
来强制编码。字符串
让我知道如果它为你工作。
gijlo24d4#
如果您将解密的数据 Package 在数据传输对象中,则可以使用Spring的Converter框架。
字符串
实现接口
org.springframework.core.convert.converter.Converter
,并添加@Component
注解。型
然后注册
型
然后为参数使用 Package 器类型(Decrypted):
型
参见https://www.baeldung.com/spring-enum-request-param