1

こんにちは、HttpSession にユーザー pojo を保存し、セッションが完了したときにその HttpSession オブジェクトを無効にすることによって、ユーザーが認証するための独自の実装を使用するアプリケーションがありますが、私がやりたいことは、セキュリティ コンテキストを使用してユーザーを認証することです。 . 私がサーブレット AuthenticateUserServlet を持っているとしましょう:

public void doPost(HttpServletRequest req,HttpServletResponse resp)
 throws ServletException,IOException{
     String username=req.getParameter("username");
     String password=req.getParameter("password");
     if(Authenticator.check(username,password)){
      HttpSession session=req.getSession(true);
      session.setAttribute("user",Authenticator.getUser(username));
      PrintWriter out= req.getWriter();
      out.println("<h2>Welcome</h2>");

  }else{
      PrintWriter out= req.getWriter();
      out.println("<h2>the password or username are incorrect</h2>");
  }
 }

上記のコードではセキュリティ コンテキストの力が得られないため、ユーザーがログインしても問題ないことを確認するときに、このユーザーがここでアクセスできるセキュリティ コンテキストを何らかの方法で伝えたいとは思いません。 AuthenticateUserServlet:

     public void doPost(HttpServletRequest req,HttpServletResponse resp)
 throws ServletException,IOException{
     String username=req.getParameter("username");
     String password=req.getParameter("password");
     LoginContext lc = new LoginContext("my-jaas",new  MyCallbackHandler(username,password));
     try{
      lc.login();
      //notice i have not save any thing in the HTTPSeession
      //i want my container to remember this user like what happens in the 
      // form based authentication where nothing gets saved in the httpSession
      // but the user keeps logged in(cartalina uses a session object not httpsession for that)
      PrintWriter out= req.getWriter();
      out.println("<h2>Welcome</h2>");
     }
     catch(LoginException e ){
      PrintWriter out= req.getWriter();
      out.println(e.getMessage());
     }


}

独自の LoginModule (「my-jaas」) を作成しましたが、Tomcat7 で Form-Based 認証を構成すると正常に動作します。

4

1 に答える 1