У меня есть страница login.html, как показано ниже.
<h2>Hello, please log in:</h2>
<br><br>
<form action="j_security_check" method=post>
<p><strong>Please Enter Your User Name: </strong>
<input type="text" name="j_username" size="25">
<p><p><strong>Please Enter Your Password: </strong>
<input type="password" size="15" name="j_password">
<p><p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
Также у меня есть страница с ошибкой, как показано ниже.
<h2>Login Incorrect, please log in:</h2>
<br><br>
<form action="j_security_check" method=post>
<p><strong>Please Enter Your User Name: </strong>
<input type="text" name="j_username" size="25">
<p><p><strong>Please Enter Your Password: </strong>
<input type="password" size="15" name="j_password">
<p><p>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
</html>
Оба настроены в web.xml и работают нормально. Теперь у меня есть фильтр, в котором я выполняю некоторые проверки (для минимизации кода я проверяю только имя пользователя == admin здесь), и если проверка не удалась, я перенаправляюсь на error.html, как показано ниже.
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
if(request.getUserPrincipal() != null){
boolean result = validateUser(request.getUserPrincipal().getName());
if(!result){
HttpSession session = request.getSession(false);
session.invalidate();
request.logout();
request.getRequestDispatcher("/error.html").forward(req, resp);
return;
}
}
chain.doFilter(req, resp);
}
Код для validateUser выглядит следующим образом:
public boolean validateUser(String name){
boolean result = false;
if("admin".equalsIgnoreCase(name)){
result = true;
}
return result;
}
Отображение фильтра в web.xml похоже на
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.listener.MyListener</listener-class>
</listener>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.Filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Roles -->
<security-role>
<description>Any rol </description>
<role-name>*</role-name>
</security-role>
<!-- Resource / Role Mapping -->
<security-constraint>
<display-name>Area secured</display-name>
<web-resource-collection>
<web-resource-name>protected_resources</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description>User with any role</description>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Tomcat SALES Application</realm-name>
<form-login-config>
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.html</form-error-page>
</form-login-config>
</login-config>
</web-app>
Итак, теперь, когда пользователь вводит действительный идентификатор пользователя и пароль, а имя пользователя не является администратором, пользователь переходит к error.html. Но после этого, когда пользователь вводит правильные учетные данные, отображается пустая страница с указанным ниже URL-адресом.
http://localhost:8080/webapps2/j_security_check
Почему возникает эта проблема?
validateUser
? Надеюсь, вы проверяете имя пользователя с помощью метода equals какif(username.equals("admin")){//valid} else {//invalid - redirect to error page}
- person Hardik Modha   schedule 09.12.2015