почему только «spring.http.encoding.force = true» работает для изменения кодировки символов в Spring Security? - PullRequest
0 голосов
/ 07 ноября 2019

В моем приложении 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

Может кто-нибудь сказать, пожалуйста, почему?

...