0

私は今日Java EE 7を練習しています。コンテナ提供の方法でユーザーを認証しようとすると、問題が発生します。つまり、j_security_checkです。Java EE 7でj_security_checkでユーザを認証する

  • アプリケーションサーバ:Apache Tomcat 7
  • プロジェクト/アプリケーション名:@WebServlet

マイWeb.xmlで注釈を付けServletDrill

  • リソース(サーブレット):

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

    マイ保護されたリソース(サーブレット):

    私は次のリンク、

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

    、のためにリダイレクトされ、ユーザーが実行

    @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()); 
        } 
    } 
    

    次のページの認証、

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

    (上記で投稿した<form>)。次のエラーページにリダイレクトユーザー(tomcat-users.xmlで上に掲載)正しい認証情報を渡しているにもかかわらず は(Web.xmlで上に掲載):

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

    私のためにこのような不具合が発生し犯人は何ですか?私はこの問題に数日間執着してきました。 <realm>については、私はそれが必要ですか?

    アイデア?

  • 答えて

    0

    最後に、私は問題を解決しました。私は適用するために必要な修正:

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

    アクションは何のアプリケーションコンテキストの接頭辞を持っていない、です。

    • Apache Tomcatのv7のディレクトリ(サーバアプリ)
    • からアクセスできるいずれかの下: 他の事は、のtomcat-users.xmlのファイルの2つのインスタンスが、私の場合には、そこにあるということですProject Explorer in EclipseServers2名の下に

    あなたは、場所を取るために影響を及ぼす見後者の場合の例の下でそれを変更したい場合は、役割(複数可)、ユーザ名、およびパスワードを変更すると、サーバーの再起動が発生します。

    関連する問題