使用filter,进行用户登陆验证。

过滤器(Filter),在web项目中用来验证用户是否登陆,我个人感觉是非常适合的(前提是你不想使用security这种的安全认证框架)。

之前在网上看到了一些关于使用filter来进行登陆验证的文章,都不太全面,有的根本就是在误导开发者,故在此写下此文章,供初级开发者学习。


想实现登陆过滤,只需完成两个工作,一个是配置文件(web.xml),一个是filter实现类的业务逻辑。看似简单,却会出现诸多问题。

以下是我项目的部分代码:

web.xml

<filter>
  <filter-name>loginFilter</filter-name>
  <filter-class>com.xxx.xxxc.filter.LoginFilter</filter-class>
  <init-param>
<param-name>initUrl</param-name>
<param-value>loginValidate.do</param-value>
</init-param>
  </filter>
  <filter-mapping>
  <filter-name>loginFilter</filter-name>
  <url-pattern>/page/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
  <filter-name>loginFilter</filter-name>
  <url-pattern>*.do</url-pattern>
  </filter-mapping>

这里的配置,可以看出以下三点信息:

1,我初始化了一个变量,名为initUrl,值为loginValidate.do。

2,我想过滤page文件夹下的所有文件(page下只有jsp文件)。

3,我想过滤所有的.do结尾的请求。

这里还需注意以下几点:

1,如果你既想过滤jsp又想过滤.do结尾的请求,这里是不可以写在一起的,需向我上面那样写两个filter-mapping

2,/page/*.jsp 这种写法是错误的,这里只有/page/*和*.jsp这两种写法。

3,上面配置文件中,我拦截了所有的.do请求,这样就连验证用户名和密码的请求也会拦截,所以我init了一个变量,在filter中将该请求忽略掉。

4,登陆页面和首页(不需要过滤的)不要放在page目录下,之前我把login.jsp放在了page下,结果访问时出现了”该页面有多次循环重定向“的提示。是因为你不断访问

登陆页面,进入filter后,又被不断重定向到登陆页面所致。

LOGINFilter代码:

private String requestUrl;
private String initUrl;
@Override
public void init(FilterConfig arg0) throws ServletException {
initUrl = arg0.getInitParameter("initUrl");
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
User user = (User) session.getAttribute("admin");
requestUrl = request.getRequestURI();
String[] reUrl = requestUrl.split("/");

if(user != null || reUrl[3].equals(initUrl)){
arg2.doFilter(request, response); 
}else{
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
}

以上代码,完成了验证用户是否登陆的工作,如果用户未登陆,会被重定向到登陆页面。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值