私は参照マニュアルを読み、フォーラムの投稿 (たとえば、 SPRING MVC POJO のフィールドで日本語の文字を保持する方法) を見て、国際化 Spring サポートに必要なすべてのことを行ったことを知る限り、私はUnicode/特殊文字を使用した Spring Security 3 インメモリ ユーザー名のマッチングの問題。私のアプリケーションはUTF-8を使用しており、Unicodeパスワードの入力を含め、すべてがうまく表示され、すべてうまく機能することに注意してください(ただし、このUnicodeパスワードは、裏で別の文字に変換され、代わりにこの文字がエンコードされているため、誤解を招く可能性がありますか?) . この Unicode ユーザー名の不一致は、Spring Security In-Memory 内部化のバグである可能性があると感じていますが、これを確認する必要があります。
読者のために、必要なすべての基本構成を行っています。ユーザー名に Unicode 文字を使用しない場合、すべてが期待どおりに機能することに注意してください。それ以外の場合は、正しい資格情報が入力されていても認証が失敗します。また、例外はスローされません。
私のスニペットは次のとおりです...
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
spring-servlet-context.xml
<default-servlet-handler />
<interceptors>
<beans:bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="lang" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
<beans:property name="paramName" value="theme" />
</beans:bean>
</interceptors>
<resources mapping="/resources/**" location="/resources/" />
<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basename" value="classpath:messages" />
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
<beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<beans:property name="defaultLocale" value="en"/>
</beans:bean>
<!-- Theme setup -->
<beans:bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
<beans:property name="basenamePrefix" value="theme-" />
</beans:bean>
<beans:bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver">
<beans:property name="defaultThemeName" value="default" />
</beans:bean>
<beans:import resource="spring-security.xml"/>
<context:component-scan base-package="com.myproject.platform" />
</beans:beans>
spring-security.xml
<beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userService">
<password-encoder ref="encoder" />
</authentication-provider>
</authentication-manager>
<beans:import resource="user-security-bean-config.xml"/>
user-security-bean-config.xml
<user-service id="userService">
<user name="ışığı" password="encodedpasswordstring"
authorities="R_U,R_A"/>
</user-service>
たとえば、ユーザー名がisigi(特殊なUnicode文字なし)の場合、すべて正常に機能することに注意してください。
私のjspファイルには、一番上の行にあります:
<%@ page language="java" session="false" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
...そしてヘッドセクションには...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
そして私のxmlファイル、UTF-8は一番上の行で宣言されています、例えば、
<?xml version="1.0" encoding="UTF-8"?>