我正在使用带有j_security_check的Websphere,我有一个带有机密和SSL设置的工作登录过滤器。由于一些复杂的需求,我需要在执行j_security_check之前处理j_username变量。
从answers found here中的一个,据说这个登录前处理无法完成。但是,我注意到之前的提问者正在使用Tomcat,而我正在使用Websphere。我发现我的问题over here有一个解决方案,但似乎每次我尝试登录时,都会收到“网站无法显示页面。网站出现编程错误。”
我通过检查语法是否正确来尝试进行故障排除。找到一些不一致的地方并尽可能地纠正它们。但是,我仍然遇到同样的错误。
有人会把我推向正确的方向吗?我可以提供更多信息,但它们大多类似于第二个链接。唯一受保护的文件夹位于\ protected \,.java servlet位于\ WEB-INF \ classes。
谢谢。
答案 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