0
我使用Spring Security的3.2.6.RELEASE工作,我已經實現了自己的自定義身份驗證提供者,以處理各種失敗的登錄。我需要在用戶名中啓用特殊字符。不過,我不能把這個工作。春季安全使用自定義身份驗證提供不包含特殊字符的用戶名
這裏是我的登錄表單:
<form method="POST" action="<c:url value='j_spring_security_check'/>" accept-charset="utf-8" enctype="application/x-www-form-urlencoded">
<!-- Table -->
<table class="table">
<tr>
<td><msg:message code="label.username"/></td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td><msg:message code="label.password"/></td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Login" /></td>
</tr>
</table>
</form>
我還包含了org.springframework.web.filter.CharacterEncodingFilter在我的web.xml是這樣的:
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<servlet-name>/*</servlet-name>
</filter-mapping>
它的權利之前彈簧安全過濾器:
<!-- spring security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>ERROR</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
那麼我在這裏錯過了什麼?登錄頁面是UTF-8編碼,當我檢查FF開發工具/ Firebug時,用戶名參數被正確發送 - user。在我的CustomAuthenticationProvider中調試:
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
UsernamePasswordAuthenticationToken token = null;
UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) authentication;
// credentials given by the user
String username = (String)auth.getPrincipal();
String password = (String)auth.getCredentials();
我看到用戶名是「userä」,登錄失敗。
謝謝大家的幫助! 人
如果有幫助,「A」解碼「澶」表示ISO 8859-1編碼被使用的地方,因爲這就是「A」的UTF-8表示 - 'C3 A4' - 解碼到這個charset。 –
看看[這個問題](http://stackoverflow.com/questions/16302065/spring-security-and-special-characters)。如果你在一個servlet容器中運行你的Spring應用程序,那可能是罪魁禍首。 –
@MelvinKicchi感謝您的評論。我在ISO 8859-1的代碼中無處不在,什麼都沒發現。也許它是在春季安全深處。我會繼續尋找一些隱藏的編碼設置。連接器中的Tomcat配置已被設置爲UTF-8。 –