2012-06-01 2 views
0

login.jsp로 로그인 서블릿을 호출하기 전과 후에 일부 로직을 구현해야합니다.GateIn : 로그인 서블릿 용 필터

그래서 url/login 필터를 작성했습니다. 나는 일부 작업에 대한 사용자 프로파일을 얻을 필요가, 그래서 나는이 LoginFilter 클래스 생성 :

public class LoginFilter implements Filter { 
    private static Logger logger = Logger.getLogger(LoginFilter.class); 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     String username = httpRequest.getParameter("username"); 
     String password = httpRequest.getParameter("password"); 

     chain.doFilter(request, response); 

     PortalRequestContext context = PortalRequestContext.getCurrentInstance(); 

     if (context == null) 
      logger.info("PortalRequestContext is NULL"); 
     else { 
      String userId = context.getRemoteUser(); 

      if (userId == null || userId.equals("")) 
       logger.info("Login failed, IP:" + httpRequest.getRemoteAddr()); 
      else 
       logger.info("Login executed, username:" + userId); 
     } 
    } 

문제는 "문맥"(PortalRequestContext는) 항상 null입니다입니다. 내가 뭘 잘못 했니? 이것이 올바른 접근 방법입니까?

답변

1

당신이 GateIn를 사용하는 경우, PortalRequestContext 년대는 아직 생성되지 로그인시

org.exoplatform.portal.webui.util.Util.getPortalRequestContext().getRequest() 

CE

0

를 사용하여 시도 할 수 있습니다,하지만 당신은 HttpServletRequest#getRemoteUser()

0
를 호출하여 원격 사용자를 얻을 수 있습니다

here과 같은 GateIN 필터를 추가 할 수 있습니다.

그리고 당신은 현재 사용자 이름 얻을이 필터에 정적으로 ConversationState를 사용할 수 있습니다

ConversationState.getCurrent().getIdentity().getUserId();

1

당신은 밸브를 개발하고 ("포털"웹 애플리케이션의 컨텍스트 파일에 추가 할 수 있습니다를 톰캣/conf의/Catalina/localhost/portal.xml). 예를 들어 SSO 연장을 GateIN에 무슨 짓을이다 그건 그 :

은 제이보스를 들어, 더 간단
// Tomcat way (Assumed that ServletAccessValve has been configured in context.xml) 
    else 
    { 
    request = ServletAccess.getRequest(); 
    } 

, 당신이 : 이 사용 ServletAccessValve

ServletAccess.setRequestAndResponse(request, response); 

그런 다음, 요청이 SSOLoginModule에 액세스 할 수 있습니다 참조 그냥 사용

javax.security.jacc.PolicyContext.getContext(HttpServletRequest.class.getName()) 
0

그냥 대화 상태 개체를 사용하십시오 :

// Gets the current user id 
ConversationState conversationState = ConversationState.getCurrent(); 

org.exoplatform.services.security.Identity identity = conversationState.getIdentity(); 
String userId = identity.getUserId(); 
관련 문제