В моем приложении Spring Security я сначала ничего не делал, чтобы изменить его кодировку символов. Но потом я обнаружил, что все остальные API-интерфейсы возвращают UTF-8, кроме API-интерфейса для входа. API входа возвращает content-type:application/json;charset=ISO-8859-1
.
Я мог бы изменить его тип контента на response.setHeader("Content-Type", "application/json");
в successfulAuthentication
, как показано ниже:
@Override
protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain,
Authentication authResult) throws IOException, ServletException {
SecretKeySpec secretKey = new SecretKeySpec(tokenService.getEncryption().getBytes("UTF-8"), "HmacSHA256");
JwtBuilder bldr = Jwts.builder()
.setSubject(((User)authResult.getPrincipal()).getUsername())
.setIssuedAt(new Date())
.setExpiration(getTokenExpirationDate())
.signWith(SignatureAlgorithm.HS256, secretKey)
.setHeaderParam("typ", "JWT");
if (authResult != null && authResult.getPrincipal() instanceof NeviaUser) {
bldr.claim("test", "test");
}
String token = bldr.compact();
response.addHeader("test-auth", "test " + token);
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "test-auth, Content-Type");
response.setHeader("Content-Type", "application/json");
response.setHeader("Access-Control-Expose-Headers", "test-auth");
}
, чтобы изменить его кодировку символов, я попытался
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
также пытался добавить в pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<jvmArguments>-Dfile.encoding=UTF8</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
, но ни один из них не сработал. Наконец, что сработало, добавив это в application.properties
:
spring.http.encoding.force=true
Может кто-нибудь сказать, пожалуйста, почему?