2009-12-31 3 views
0

Seam 웹 앱에 대한 사용자의 요청이 끝날 때마다 인터셉트해야합니다. 필터가 비즈니스 로직에 충돌하기 전에 요청을 잡기위한 올바른 도구가 될 것 같다 동안Seam으로 HTTP 세션의 끝을 가로 채기

는 인터셉터는 ... 각 클래스에 대한 조언으로 유용하게

감사 보인다!

답변

1

필터를 사용하여 요청 및 응답 개체를 차단할 수 있습니다. Byn 필터 인터페이스를 사용하여 요청을 차단할 수 있습니다. 공극 INIT는 (FilterConfig filterConfig)는 는 doFilter 방법 공극 doFilter (ServletRequest를 요청 ServletResponse를 응답 FilterChain 쇄) 가 공개 IOException, ServletException을

수신 할 수있는 상기와 같은 방법을 사용함으로써 ServletException을

을 던진다 요청 객체

2

귀하의 질문은 요청이 아닌 HTTP 세션 종료의 차단에 관한 것입니다. 이 경우 세션 수신기를 구현할 수 있어야합니다. web.xml 파일에 선언하십시오. 이 메소드는 Seam 컴포넌트가 아니기 때문에 정적 메소드를 사용하여 컴포넌트 참조를 얻어야한다.

그렇지 않으면 단순히 세션 컨텍스트의 끝을 관찰하는 구성 요소를 구현하는 것이 좋습니다. 이벤트 또는 응용 프로그램 범위의 구성 요소 일 수 있습니다.

@Scope(ScopeType.EVENT) 
@Name("com.yourdomain.observer.sessionObserver") 
public class SessionObserver 
{ 

@In 
private EntityManager entityManager; 

// automatically create this component when the session is destroyed (actually just before it is) 
@Observer("org.jboss.seam.context.preContextDestroy.SESSION", create = true) 
@Transactional 
public void onSessionDestroyed() 
{ 
    entityManager.persist(httpSession); 
} 
} 

정상적으로 작동해야하지만 오타가있을 수 있습니다. 이것은 세션 컨텍스트의 끝을 관찰하는 것과 관련하여 질문에 대답해야합니다.

월터

0

주제 제목이 메시지의 질문과 충돌합니다. 제목에 세션의 끝에 연결하는 방법을 묻는 중입니다. 메시지 끝에 요청 끝을 연결하는 방법을 묻는 중입니다. 그것들은 완전히 다른 두 가지 범위입니다. 세션은 클라이언트가 수행 한 첫 번째 요청에서부터 HttpSession 개체가 생성되지 않은 시간에서부터 시간이 초과되거나 무효화 될 때까지 지속됩니다. 요청은 관련 응답이 완전히 커밋되고 전송 될 때까지 클라이언트의 첫 번째 클릭/책갈피/주소 표시 줄 호출에서부터 시작됩니다.

의가 END_LINK하면 관심있는 이미 요청이 처리되는하기 전에 몇 가지 코드 후크 필터의 장점에 대해 이야기로 실제로 요청를 의미한다고 가정하자. 아마도 Filter을 사용하여 코드가 요청을 처리 한 후 후에 걸릴 수 있다는 것을 깨닫지 못했을 것입니다. 단지 당신이해야 할 일은 다음에FilterChain#doFilter() 뒤에 적절한 코드를 넣는 것입니다.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    // You can do here stuff BEFORE the request is been processed further. 

    chain.doFilter(request, response); 

    // You can do here stuff AFTER the request is been processed. 
} 

당신은 아마 많은 선발이 기대처럼 자동적으로의 FilterChain#doFilter() 종류, 즉시 방법의 블록을 종료 할 것으로 예상하는 예를 들어 HttpServletResponse#sendRedirect() 및 배우자들에 대한.이것은 사실이 아니며, 예외/오류 외에는 return 문 및/또는 메서드 블록을 사용합니다. 이러한 메소드는 일반적인 Java 방식으로 호출되며 특별한 것은 없습니다.