Websphere预登录到j_security_check

时间:2012-04-12 09:30:00

标签: authentication servlets websphere servlet-filters j-security-check

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

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

我通过检查语法是否正确来尝试进行故障排除。找到一些不一致的地方并尽可能地纠正它们。但是,我仍然遇到同样的错误。

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

谢谢。

1 个答案:

答案 0 :(得分: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 \ classes \ 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