2012-05-11 4 views
0

다른 보통의 HTTP 서블릿에서 필터 서블릿의 세션 속성에 액세스 할 수 없습니다 : 내가 세션 속성을 설정하기 위해 필터 서블릿을 사용하면내가 여기에 문제가

, 난 다른 일반 HTTP 서블릿에서 세션 속성을 검색하려고를하지만, 보이는 getAttribute ('system.userinfo') 아무것도 검색 할 수 없습니다. 이게 뭐가 잘못 됐니? 감사!

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest httpReq = (HttpServletRequest) request; 
    HttpServletResponse httpResp = (HttpServletResponse) response; 
    HttpSession session = httpReq.getSession(); 

    httpReq.setCharacterEncoding("UTF-8"); 

    UserDTO dto = new UserDTO(); 
    session.setAttribute("system.userinfo", dto); 

    chain.doFilter(request, response); 

} 


public class FileUpload extends HttpServlet { 
    @SuppressWarnings("unchecked") 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 
     response.setCharacterEncoding("UTF-8"); 

     // cannot get anything here 
     UserDTO userinfo = (UserDTO)request.getSession(false).getAttribute("system.userinfo"); 


     } 
} 

두 서블릿이 동일한 웹 응용 프로그램에 있습니다.

+0

어떻게 테스트 했습니까? 어떤 요청 방법 - GET/POST? – adatapost

+0

체인의 필터가 세션을 지우고 있지 않습니까? – kosa

+0

다른 리스터 서블릿도 사용하고 있습니다. 속성을 검색 할 수 있습니다. 그래서 나는 그 속성을 지울 것이라고 생각하지 않는다. – terry

답변

0

필터에서 생성 된 것으로 생각되는 서블릿에서 세션을 얻지 못하는 것 같습니다. 필터에서 항상 새로운 세션을 생성하는 req.getSession()을 사용하고 있습니다. request.getSession (false)를 제공하는 서블릿에서 세션이 없거나 기존 세션을 반환하면 컨테이너는 null을 반환한다고 가정합니다. 어떤 서블릿 컨테이너를 사용하고 있습니까? IDE를 사용하는 경우 디버그 지점을 넣고 세션 ID를 비교하여 동일하다는 것을 확인할 수 있습니까? 또한, 귀하의 UserDTO serializable입니까?

+0

제가 알아 낸 바로는 올바른 필터 url-pattern을 web.xml의 올바른 servlt 매핑으로 설정하지 않았습니다. 따라서 필터는 서블릿에 적용되지 않습니다. – terry

+0

@terry : 답변을 게시하고 수락하십시오. 좋은 습관입니다. –

+0

내 자신의 질문에 대답 할 수없는 것 같습니다. – terry

관련 문제