0

I практика Java EE 7 в настоящее время. Я сталкиваюсь с проблемой при попытке аутентификации пользователя, используя предоставленный контейнер, то есть j_security_check.Аутентификация пользователя с помощью j_security_check в Java EE 7

  • Сервер приложений: Apache Tomcat 7
  • Название проекта/Применение: ServletDrill
  • ресурсов (Servlet) с аннотацией @WebServlet

Мои Web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>ServletDrill</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <security-constraint> 
    <web-resource-collection> 
     <web-resource-name>To_Auth</web-resource-name>  
     <url-pattern>/auth/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>valid</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <login-config> 
    <auth-method>FORM</auth-method>  
    <form-login-config> 
     <form-login-page>/FormAuth.jsp</form-login-page> 
     <form-error-page>/LogInErr.jsp</form-error-page> 
    </form-login-config> 
    </login-config> 
</web-app> 

Мои tomcat-users.xml:

<tomcat-users> 
<role rolename="valid"/> 
<user username="username" password="pass" roles="valid"/> 
</tomcat-users> 

Мои <form>:

<form action="/ServletDrill/j_security_check" accept-charset="UTF-8" method="post"> 
<fieldset id="postForm"> 
<legend>j_security_check method</legend> 
<div class="partContainer"> 
<div class="left"><label for="user" >User Name: </label></div> 
<div class="right"><input type="text" name="j_username" id="user" required="required" maxlength="20"></div> 
</div> 
<hr/> 

<div class="partContainer"> 
<div class="left"><label for="pass" >Pass: </label></div> 
<div class="right"><input type="password" name="j_password" id="pass" required="required" maxlength="20"></div> 
</div> 

<hr/> 
<div class="partContainer"> 
<div class="left"><input type="submit" value="Log In"></div> 
<div class="right"><input type="reset" value="Reset"></div> 
</div> 
</fieldset> 
</form> 

Мой защищенный ресурс (Servlet):

@WebServlet("/auth/NeedsPriorAuth") 
public final class NeedsPriorAuth extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
     response.getWriter().append("Welcome, "+request.getRemoteUser()+". The user has been authenticated before hand").append("\n Auth Type: "+request.getAuthType()); 
    } 
} 

Когда я выполняю следующую ссылку,

<a href="/ServletDrill/auth/NeedsPriorAuth">Access Protected Servlet</a> 

, пользователь перенаправляется на аутентификация на следующей странице,

<form-login-page>/FormAuth.jsp</form-login-page> 

(<form>, который я разместил выше). Несмотря на прохождение в правильных учетных данных (размещенных выше в tomcat-users.xml) пользователь перенаправляется на следующей странице Error (размещена выше в Web.xml):

<form-error-page>/LogInErr.jsp</form-error-page> 

Что является виновником, который вызывает такое неудобство для меня? Я уже несколько дней застал эту проблему. Как насчет <realm>, мне это нужно?

Любые идеи?

ответ

0

Там вы идете, в конце концов, я решил проблему. Модификация, что мне нужно применить:

<form action="j_security_check" accept-charset="UTF-8" method="post"> 

То есть действия не имеет контекст приложения префикса. Другое дело, что есть, в моем случае, 2 экземпляра -users.xml кот файла:

  • Под директории Apache Tomcat v7 (приложение-сервер)
  • И один доступный из Project Explorer in Eclipse под Servers2 имя

При изменении роли (ролей), имя пользователя и пароль, если вы хотите увидеть, аффект иметь место, изменить его в соответствии последнем примере экземпляра; после перезагрузки сервера.