具有特殊字符的密码,例如"pàssword"在 tomcat-user 中不起作用.xml



我在Tomcat 上本地运行的JSF应用程序存在登录问题

我有一个j_security登录表单,看起来大致像

<form id="loginForm" method="post" action="j_security_check" >
<h:panelGrid columns="2" cellpadding="5">
<h:inputText id="j_username" required="true" label="username" />
<h:inputSecret id="j_password" required="true" label="password" />
<input type="submit" name="login" value="Login"/>
</h:panelGrid>
</form>

我的web.xml中有这个

<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml?error=1</form-error-page>
</form-login-config>
</login-config>

我使用tomcat-users.xml中定义的用户登录,但它不适用于特殊字符

我在web.xml中添加了一个过滤器

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

我确保我的连接器在server.xml中具有URIEncoding

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

相关问题:

  • 带有特殊字符的java ldap密码不起作用
  • 如何调试j-security-check问题

我的问题有两个

  1. 它不适用于特殊字符(例如:pàssword(
  2. 我不知道如何检查发送的密码,有没有办法记录或用调试器拦截它

感谢的任何帮助

这是旧的,但我希望它能帮助一些人(我今天也遇到了同样的问题(

为了支持特殊字符,您需要将编码更改为UTF-8(默认为latin1(

我已经通过在context.xml文件中将编码characterEncoding="UTF-8"更改为UTF-8来修复它。

<Valve className="org.apache.catalina.authenticator.FormAuthenticator" charset="UTF-8"/>

最新更新