前几天领导部门对门户网站进行渗透测试,找到一个页面没有身份验证可以直接访问。我以前没有开发过网站,就在网上找了找相关材料,不过,说实话,虽然多,但是都不咋地。遇到这样那样的问题,不过幸好,解决掉了。
碰到的问题主要是:
(1)web.xml文档必须是utf-8编码的,我的nodepad默认的ANSI编码格式的。
(2)登陆页面,提交到loginaction.jsp去处理,我确没有将其过滤掉,只对登陆页面index.jsp去处理,结果是登陆上去了,但是一个空白页面,意思是经过验证,到了将用户名和密码提交到loginaction.jsp就被卡住了。
(3)jdk 版本不一致,原来eclipse可以配置版本的,汗颜,搞开发一年,确实不晓得。不过自己用eclipse时间确实不长,因为以前用的是netbeans。 ()
(4)chain.doFilter(request, response);不能少的。
贴代码如下:
public class LoginFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
HttpSession session = servletRequest.getSession();
// 获得用户请求的URI
String path = servletRequest.getRequestURI();
// System.out.println(path);
// 从session里取员工登录名
String glyxm = (String) session.getAttribute("xm");
// 登陆页面无需过滤
if (path.equals("/admin/userlogin.jsp")) {
// 已经登陆,继续此次请求
chain.doFilter(request, response);
return;
} else {
// 判断如果没有取到员工信息,就跳转到登陆页面
if (glyxm == null) {
// 跳转到登陆页面
servletResponse.sendRedirect(http://xxxx/xxx);
return;
} else {
chain.doFilter(request, response);
}
}
}
public void destroy() {
// TODO Auto-generated method stub
}
}
xml的配置文档为:
<filter>
<filter-name>login</filter-name>
<filter-class>LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/xxx/*</url-pattern>
</filter-mapping>