过滤器_登录权限的判断

登陆权限判断

登陆, 提交到登陆Servlet处理其业务!
登陆成功, 跳转到首页,显示欢迎信息 + 列表信息
登陆失败,跳转到登陆!

要求:

只有登陆后,才可以访问首页, 显示列表
如果没有登陆,直接访问首页列表,要跳转到登陆!

实现思路:

1.Login.jsp   登陆页面
2.List.jsp     列表显示
3.LoginServlet.java   登陆处理servlet
4.ListServlet.java   首页列表查询Servlet
5.LoginFilter.java     登陆验证过滤器

能直接访问的链接有:
     http://localhost:8080/contactSystem/login.jsp
     http://localhost:8080/contactSystem/LoginServlet
 不能直接访问的链接有:
     http://localhost:8080/contactSystem/ListServlet
      http://localhost:8080/contactSystem/list.jsp

核心过滤器代码:

但是此过滤器有问题:
①页面用了js和css,也会被拦截,所以通过截取uri来判断这样不妥。
②但登录成功后再直接访问list.jsp,能进入,而且是空数据。
所以此代码仅供过滤器写法作参考。
   
   
  1. package com.cn.filter;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import javax.servlet.http.HttpSession;
  12. /**
  13. * 登录验证过滤器
  14. * @author liuzhiyong
  15. 能直接访问的链接有:
  16. http://localhost:8080/contactSystem/login.jsp
  17. http://localhost:8080/contactSystem/LoginServlet
  18. 不能直接访问的链接有:
  19. http://localhost:8080/contactSystem/ListServlet
  20. http://localhost:8080/contactSystem/list.jsp
  21. */
  22. public class LoginFilter implements Filter{
  23. /**
  24. * 拦截业务逻辑:
  25. * 1.先指定放行的资源,哪些资源不需要拦截:
  26. * login.jsp + /LoginServlet (request对象可以获取)
  27. * 2.获取session,从session中获取用户信息userInfo
  28. * 3.再判断用户信息是否为空
  29. * 为空,说明没有登录,跳转到登录
  30. * 不为空,已经登录,放行
  31. */
  32. @Override
  33. public void doFilter(ServletRequest req, ServletResponse res,
  34. FilterChain chain) throws IOException, ServletException {
  35. //转型
  36. HttpServletRequest request = (HttpServletRequest)req;
  37. HttpServletResponse response = (HttpServletResponse)res;
  38. //获取到请求的uri
  39. String uri = request.getRequestURI();
  40. System.out.println("=======拦截的uri=========="+uri);
  41. //先判断指定放行的资源,给予放行:
  42. if(uri.equals(request.getContextPath()+"/LoginServlet") || uri.equals(request.getContextPath()+"/login.jsp")
  43. || uri.equals(request.getContextPath()+"/css/login.css") || uri.equals(request.getContextPath()+"/js/login.js")
  44. || uri.equals(request.getContextPath()+"/js/jquery-1.8.2.js")){
  45. //放行
  46. chain.doFilter(request, response);
  47. }else{//拦截其它资源
  48. //获取session,从session中获取用户信息userInfo
  49. HttpSession session = request.getSession(false);//注意这里填上参数false,以免自己创建
  50. if(session != null){
  51. //从session中获取用户信息userInfo
  52. Object userInfo = session.getAttribute("userInfo");
  53. //判断用户信息是否为空
  54. if(userInfo == null){//没有登录,跳转到登录
  55. request.getRequestDispatcher("/login.jsp").forward(request, response);
  56. }else{//已经登录,放行
  57. chain.doFilter(request, response);
  58. }
  59. }else{//session为空,说明也没有登录,跳到登录
  60. request.getRequestDispatcher("/login.jsp").forward(request, response);
  61. }
  62. }
  63. }
  64. @Override
  65. public void init(FilterConfig filterConfig) throws ServletException {
  66. // TODO Auto-generated method stub
  67. }
  68. @Override
  69. public void destroy() {
  70. // TODO Auto-generated method stub
  71. }
  72. }
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值