Spring Security java.lang.IllegalArgumentException:输入中的非十六进制字符

Jep*_*jep 5 java windows spring-security character-encoding tomcat7

我在Windows7环境中的Tomcat服务器中部署了现有的Maven项目.我正在使用tomcat7,spring-security-core 3.1.0.

但是,每次我登录我的webapp时,都会收到错误消息

java.lang.IllegalArgumentException: Non-hex character in input
Run Code Online (Sandbox Code Playgroud)

该代码在Linux环境中运行良好.所以我在想它是因为我在我的本地环境中使用windows7.当我查看互联网时,我发现这是Linux和Windows之间的编码问题.

我试过设置

JAVA_TOOL_OPTIONS -Dfile.encoding = UTF8

但没有成功.请帮帮我.提前致谢!

小智 2

最有可能的是,当您登录时,事件发生的顺序是这样的:

  1. Spring通过用户名从数据库中选择一个实体。
  2. Spring 必须检查输入的密码是否与存储的编码密码匹配。

为了检查匹配,Spring 使用您很可能已配置的PasswordEncoder 。

您的密码编码器期望存储的编码密码是十六进制字符序列(之前由该PasswordEncoder 编码)。因此,它尝试将 CharSequence 解码为 byte[],但失败(source)。

解决方案是使用先前编码的密码(例如通过 BCryptPasswordEncoder)保留用户。