我需要在login.jsp调用的登录servlet之前和之后实现一些逻辑。
所以我为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);
}
}问题是"context“(PortalRequestContext)总是空的。我做错了什么?这是正确的方法吗?
发布于 2012-06-28 16:17:48
如果您使用的是GateIn,可以尝试使用
org.exoplatform.portal.webui.util.Util.getPortalRequestContext().getRequest()ce
发布于 2013-12-20 16:47:26
您可以开发一个Valve并将其添加到"portal“webapp (Tomcat/conf/Catalina/localhost/portal.xml)的上下文文件中。例如,这就是在单点登录扩展的GateIN中所做的事情:参见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())发布于 2013-01-28 10:19:40
登录时,尚未创建PortalRequestContext,但您可以通过调用HttpServletRequest#getRemoteUser()获取远程用户
https://stackoverflow.com/questions/10852309
复制相似问题