0

Spring Security が Unicode で動作するために必要なすべての設定を行ったと思いますが、インメモリ認証を使用するときにユーザー名に特殊な Unicode 文字を使用すると機能しません。Spring は内部化をサポートしていると主張しているため、これはユーザー名に Unicode 文字を使用する場合の Spring Security In-Memory のバグでしょうか? リファレンス マニュアル、フォーラムの投稿 ( How to hold japanese characters in SPRING MVC POJO's fieldなど) を調べ、Spring の国際化のセットアップに必要なすべてのことを行ったことを確認してください。ただし、Unicode/特殊文字を使用した Spring Security 3 インメモリ ユーザー名の一致に問題があります。私のアプリケーション、IDE、およびファイルは UTF-8 を使用しており、すべてが正常に表示され、そうでない場合はすべて正常に動作することに注意してください。ユーザー名には特殊な Unicode 文字を使用します。この Unicode ユーザー名の不一致は、Spring Security In-Memory の内部化のバグである可能性があると感じていますが、これを確認する必要があるか、何か監視したことがある場合はお知らせください。

私のスニペットは次のとおりです...

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"?>

例外やエラーはスローされません。

4

1 に答える 1

1

同様の問題が発生する可能性がある他のユーザーのため、web.xml ファイル内のencodingFilterの順序は非常に重要であり、フィルター リストの先頭に配置する必要があります。そうしないと機能しません。投稿したリンクを読んだのに、昨夜遅くに 3 回目を読むまで、どういうわけか 2 回見逃してしまいました。次のように適切な場所にURIEncoding="UTF-8"を追加して、server.xml ファイルで Tomcat 設定を UTF-8 に正しく構成したことを投稿で忘れていました。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
       URIEncoding="UTF-8"/>


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
于 2013-10-09T11:14:07.747 に答える