0

我正在使用带有j_security_check的Websphere,并且我有一个带有CONFIDENTIAL和SSL设置的工作登录过滤器。由于一些复杂的需求,我需要在执行j_security_check之前处理j_username变量。Websphere预登录到j_security_check

answers found here之一,据说这个预登录处理不能完成。不过,我注意到前面的提问者使用的是Tomcat,而我正在使用Websphere。我发现有一个针对我的问题over here的解决方案,但似乎每次我尝试登录时,都会收到“该网站无法显示该页面,该网站有编程错误。”

我试着通过检查语法是否正确来排除故障。发现了一些不一致之处,并尽可能地纠正了它们。但是,我仍然得到相同的错误。

有人可以把我扔在正确的方向吗?我可以提供更多信息,但它们大部分与第二个链接相似。唯一受保护的文件夹位于\ protected \中,而.java servlet位于\ WEB-INF \ classes中。

谢谢。

+0

您可以指向WAS 7.0信息中心的特定链接,而不是信息中心的默认主页?还有什么是这个复杂的要求,要求访问j_security_check。会使用一些JavaScript的帮助吗? – Manglu 2012-04-12 23:45:12

+0

[编辑链接在这里。](http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.base.doc%2Finfo%2Faes%2Fae%2Ftsec_servlet .html) 糟糕。我去了他们的帮助页面,并从那里开始搜索。我已经如上编辑它。尽管我发现了一些语法错误,例如以结尾,这让我相信该页面的代码并不像看起来那么可靠,但我将此代码从此页面中删除。 – 2012-04-13 03:15:16

+0

尽管存在HTTPS和SSL,但仍有一项不幸的要求,即要加密从客户端发送到服务器的密码。他们希望在AD中存储纯文本密码,同时保持通道和数据均已加密。我正在考虑尝试两种方法。第一种意思是我必须在客户端加密密码,将其发送到服务器,在与AD进行比较之前在服务器端解密它。另一种方法是散列密码客户端,将其发送到服务器,然后让服务器从AD中检索密码并在比较两者之前对其进行散列处理。 – 2012-04-13 03:25:50

回答

1

如果有人有兴趣,结果在这里:

对于\ WEB-INF \ web.xml中

<filter id="Filter_1"> 
    <filter-name>LoginFilter</filter-name> 
    <filter-class>com.myloginfilter.MyLoginFilter</filter-class> 
    <description>Performs pre-login operation</description> 
</filter> 
<filter-mapping> 
    <filter-name>LoginFilter</filter-name> 
    <url-pattern>/j_security_check</url-pattern> 
</filter-mapping> 

对于\ WEB-INF \类\ COM \ myloginfilter \ MyLoginFilter.class

public class MyLoginFilter implements Filter { 

    protected FilterConfig filterConfig; 

    public void init(FilterConfig filterConfig) throws ServletException { 
     this.filterConfig = filterConfig; 
    } 

    public void destroy() { 
     this.filterConfig = null; 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { 
     chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), response); 
    } 

    public static class MyRequestWrapper extends HttpServletRequestWrapper { 

     public MyRequestWrapper(HttpServletRequest request) { 
      super(request); 
     } 

     @Override 
     public String getParameter(String name) { 
      String username= getRequest().getParameter("j_username"); 

      if ("j_password".equals(name) && "admin".equals(username)) { 
       username = "administrator"; 
       return username; 
      } 
      return super.getParameter(name); 
     } 
    } 
} 

要编译它,使用javac用命令:

javac -cp servlet-api-2.3.jar MyLoginFilter.class 
+0

这真的有用吗?通常,在执行过滤器之前,j_security_check已完成。 – 2013-04-28 15:06:45

+0

是的,至少对Tomcat和WebSphere来说都是如此。 – 2013-05-10 02:28:21