2012-06-01 92 views
0

我需要在login.jsp調用的登錄servlet之前和之後實現一些邏輯。GateIn:用於登錄servlet的過濾器

所以我寫了一個URL /登錄過濾器來做到這一點。我需要對某些操作的用戶配置文件,所以我創造了這個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)總是空。我做錯了什麼?這是正確的方法嗎?

回答

1

如果您正在使用GateIn,你可以嘗試使用

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

CE

0

在登錄時,尚未創建PortalRequestContext的,但你可以通過調用HttpServletRequest#getRemoteUser()

0
讓遠程用戶

您可以添加一個GateIN過濾器,如詳細的here

而且你可以在此過濾器靜態地使用ConversationState來獲取當前用戶名:

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

1

你可以開發一個閥門,並把它添加到的「門戶」 Web應用程序上下文文件(Tomcat的/ conf目錄/卡塔利娜/本地主機/ portal.xml)。 這就是在GateIN做了SSO擴展,例如: 見ServletAccessValve

ServletAccess.setRequestAndResponse(request, response); 

然後,請求在SSOLoginModule訪問使用此:

// Tomcat way (Assumed that ServletAccessValve has been configured in context.xml) 
    else 
    { 
    request = ServletAccess.getRequest(); 
    } 

對於JBoss,它更簡單,你有隻是使用

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