2016-11-16 8 views
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>"); 
    } 
} 

코드 위의 나에게 보안 컨텍스트의 힘을 제공하지 않습니다 그래서 사용자가 어떻게든지에 말할 로그인을 확인 있는지 확인 때입니다 wan't 무엇 보안 컨텍스트이 사용자는 여기에 액세스 자신의 역할 내 AuthenticateUserServlet 내부의이 같은 일입니다 수 : 내가 ("내-JAAS")를 내 자신의 로그인 모듈을 만든

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


} 

내가 폼 기반 인증을 구성 할 때 그것을 잘 작동합니다 tomcat7에서 작동합니다.

서블릿 3.0

답변

2

HttpServletRequest (https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#login(java.lang.String,%20java.lang.String))에 login 방법이있다 그래서 당신은 당신이 spechless 저를 왼쪽

public void doPost(HttpServletRequest req,HttpServletResponse resp) 
throws ServletException,IOException{ 
    String username=req.getParameter("username"); 
    String password=req.getParameter("password"); 
    try{ 
     req.login(username, password); 
     PrintWriter out= req.getWriter(); 
     out.println("<h2>Welcome</h2>"); 
    } catch(ServletException e){ 
     PrintWriter out= req.getWriter(); 
     out.println(e.getMessage()); 
    }   
} 
+0

사람처럼 로그인 할 수 있습니다, 그것은 내 눈 앞에 있었다; 감사합니다. – achabahe

+1

기꺼이 도와 드리겠습니다. :-) – flo