0

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

此处找到的答案之一,据说无法进行此登录前处理。但是,我注意到之前的提问者使用的是 Tomcat,而我使用的是 Websphere。我发现这里有解决我的问题的方法但似乎每次我尝试登录时,都会收到“网站无法显示页面。网站出现编程错误”。

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

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

谢谢你。

4

1 回答 1

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
于 2012-04-26T03:56:45.230 回答