开发工具与关键技术:Java/MyEclipse 10
作者:张俊辉
撰写时间:2019年08月8日
本文章是以登录后把用户信息保存到Session中为依据写的过滤器,当请求的页面有用户信息的Session时则不作处理,继续运行,当请求的页面没有用户信息的Session时,则重定向到登录页面。
过滤器的配置如下:
<filter>
<filter-name>RedirectFilter</filter-name>
<filter-class>com.zjh.filter.RedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RedirectFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
在写路径url-pattern时注意不要包含一些公共的css、或js文件,如果包含这些文件,你的页面将读取不了这些css与js文件。
过滤器代码如下:
public class RedirectFilter implements Filter{
private FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
//判断是否是登录方法与验证码图片的servlet if(!"/servlet/LoginServlet".equals(((HttpServletRequest)arg0).getServletPath())&&!"/servlet/IdentityServlet".equals(((HttpServletRequest)arg0).getServletPath())){
HttpSession session=((HttpServletRequest)arg0).getSession();
UserPo userS=(UserPo)session.getAttribute("userS");
//判断用户信息Session是否为空
if(userS==null){
//为空则重定向
HttpServletResponse response=(HttpServletResponse) arg1;
response.sendRedirect("/ERP/servlet/LoginServlet");
}else{
//不为空则通行
arg2.doFilter(arg0, arg1);
}
}else{
//如果是就放其通过
arg2.doFilter(arg0, arg1);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig=arg0;
}
}
排除登录方法servlet是因为登录本就用于创建用户信息的Session,因此在登录方法中便找不到用户信息的Session,如果不排除他,则页面会不断的重定向,成了个死循环。如下图:
排除验证码是因为登录页面需要显示验证码图片,如果过滤掉那么登录页面中的验证码便会显示找不到图片。如下图: