当系统没有经过验证,直接采取链接的方式访问系统时,需要利用过滤器的功能防止这种现象的产生,保证系统的安全。下面示例如何利用Servlet的filter功能进行过滤:
新建一个SessionChecker类,实现Filter接口
public class SessionChecker implements Filter{
public void destroy(){
}
public void init(FilterConfig arg0) throws ServletException{
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOExcepiton,ServeltException{
//获取访问的链接
String requestUrl = ((HttpServletRequest)request).getRequestUrl().toString();
boolean noNeedLogin = false;
//判断是否已经登录过系统的条件
noNeedLogin = ((HttpServletRequest)request).getSession().getAttribute("userInfo") !=null || requestUrl.indexOf("login.do") > 0 ;
//过滤掉某些无需判断的链接,如String notCheckUrl = "actionDataCreate.do,actionOaWfInfo.do";
String[] nocheck = notCheckUrl.split("[,|,]");
for(int i=0;i<nocheck.length;i++){
if(requestUrl.indexOf(nocheck[i]) >=0){
noNeedLogin = true;
break;
}
}
//如果已经登录了或者访问某些无需过滤的链接时
if(noNeedLogin){
chain.doFilter(request,response);
}else{
request.getRequestDispatcher("/page/login.jsp").forward(request,response);
return;
}
}
}
web.xml中的配置如下:
<filter>
<filter-name>SessionChecker</filter-name>
<filter-class>net.nk.util.filter.SessionChecker</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionChecker</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SessionChecker</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>