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