javaweb:Filter实现权限拦截

打印 上一主题 下一主题

主题 876|帖子 876|积分 2630

什么是Filter实现权限拦截,比如说我们登陆一个网站,登陆成功后可以访问其中的内容,退出登陆后就不能再对内容进行访问,这就用到了我们的Filter实现权限拦截。
那么具体是怎么实现的呢?
原理很简单,我们可以给已登录用户session存放一个用于标记登陆的数据,只需要在过滤器里看能否获取数据来进行是否有权访问的判断。
话不多说,我们直接开始。
一、建立一个登陆页面index.jsp
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>登录</title>
  8. </head>
  9. <body>
  10. <h1>登录</h1>
  11. <form action="/checkuser">
  12. 用户名:<input type="text" name="username" />
  13. <input type="submit" value="登录"/>
  14. </form>
  15. </body>
  16. </html>
复制代码
二、建立一个登陆成功的页面,具有注销功能
先建立一个sys文件,在sys文件下建立loginsuccess.jsp
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>主界面</title>
  8. </head>
  9. <body>
  10. <h1>登录成功</h1>
  11. <h1><a target="_blank" href="https://www.cnblogs.com/Logout">注销</a></h1>
  12. </body>
  13. </html>
复制代码
三、建立一个servlet用于验证登录CheckUser.class
  1. 1 package com.jms.servlet;
  2. 2
  3. 3 import java.io.IOException;
  4. 4
  5. 5 import javax.servlet.ServletException;
  6. 6 import javax.servlet.http.HttpServlet;
  7. 7 import javax.servlet.http.HttpServletRequest;
  8. 8 import javax.servlet.http.HttpServletResponse;
  9. 9
  10. 10 public class CheckUser extends HttpServlet{
  11. 11
  12. 12     /**
  13. 13      *
  14. 14      */
  15. 15     private static final long serialVersionUID = 1L;
  16. 16
  17. 17     @Override
  18. 18     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  19. 19         String username = req.getParameter("username");
  20. 20         if(username.equals("admin")) {
  21. 21             req.getSession().setAttribute("USER_ID", req.getSession().getId());
  22. 22             resp.sendRedirect("/sys/loginsuccess.jsp");
  23. 23         }else {
  24. 24             resp.sendRedirect("/index.jsp");
  25. 25         }
  26. 26     }
  27. 27
  28. 28     @Override
  29. 29     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  30. 30         doGet(req, resp);
  31. 31     }
  32. 32     
  33. 33 }
复制代码
修改web.xml注册servelt
  1.      <servlet>
  2.             <servlet-name>CheckUser</servlet-name>
  3.             <servlet-class>com.jms.servlet.CheckUser</servlet-class>
  4.         </servlet>
  5.         <servlet-mapping>
  6.             <servlet-name>CheckUser</servlet-name>
  7.             <url-pattern>/checkuser</url-pattern>
  8.         </servlet-mapping>
复制代码
四、建立一个Servlet用于注销用户LogoutServlet.class
  1. 1 package com.jms.servlet;
  2. 2
  3. 3 import java.io.IOException;
  4. 4
  5. 5 import javax.servlet.ServletException;
  6. 6 import javax.servlet.http.HttpServlet;
  7. 7 import javax.servlet.http.HttpServletRequest;
  8. 8 import javax.servlet.http.HttpServletResponse;
  9. 9
  10. 10 public class LogoutServlet extends HttpServlet{
  11. 11
  12. 12     /**
  13. 13      *
  14. 14      */
  15. 15     private static final long serialVersionUID = 1L;
  16. 16
  17. 17     @Override
  18. 18     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  19. 19         if(req.getSession().getAttribute("USER_ID") != null) {
  20. 20             req.getSession().removeAttribute("USER_ID");
  21. 21             resp.sendRedirect("/index.jsp");
  22. 22         }
  23. 23     }
  24. 24
  25. 25     @Override
  26. 26     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  27. 27         doGet(req, resp);
  28. 28     }
  29. 29     
  30. 30     
  31. 31
  32. 32 }
复制代码
修改web.xml
  1.         <servlet>
  2.             <servlet-name>LogoutServlet</servlet-name>
  3.             <servlet-class>com.jms.servlet.LogoutServlet</servlet-class>
  4.         </servlet>
  5.         <servlet-mapping>
  6.             <servlet-name>LogoutServlet</servlet-name>
  7.             <url-pattern>/Logout</url-pattern>
  8.         </servlet-mapping>            
复制代码
 
五、建立一个过滤器拦截未登陆的用户
  1. 1 package com.jms.filter;
  2. 2
  3. 3 import java.io.IOException;
  4. 4
  5. 5 import javax.servlet.Filter;
  6. 6 import javax.servlet.FilterChain;
  7. 7 import javax.servlet.ServletException;
  8. 8 import javax.servlet.ServletRequest;
  9. 9 import javax.servlet.ServletResponse;
  10. 10 import javax.servlet.http.HttpServletRequest;
  11. 11 import javax.servlet.http.HttpServletResponse;
  12. 12
  13. 13 public class UserFilter implements Filter{
  14. 14
  15. 15     @Override
  16. 16     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  17. 17             throws IOException, ServletException {
  18. 18         HttpServletRequest req = (HttpServletRequest)request;
  19. 19         HttpServletResponse resp = (HttpServletResponse)response;
  20. 20         if(req.getSession().getAttribute("USER_ID") == null) {
  21. 21             resp.sendRedirect("/index.jsp");
  22. 22         }else {
  23. 23             resp.sendRedirect("/sys/loginsuccess.jsp");
  24. 24         }
  25. 25         chain.doFilter(request, response);//给其他过滤器放行
  26. 26     }
  27. 27
  28. 28 }
复制代码
修改web.xml
  1.      <filter>
  2.             <filter-name>UserFilter</filter-name>
  3.             <filter-class>com.jms.filter.UserFilter</filter-class>
  4.         </filter>
  5.         <filter-mapping>
  6.             <filter-name>UserFilter</filter-name>
  7.             <url-pattern>/sys/*</url-pattern>
  8.         </filter-mapping>
复制代码
六、测试
首先输入错误用户名登陆

 
返回了登陆页面
 
 
 接着我们输入正确用户名“admin”

 
 成功登录

 
 我们复制网址,点击注销后,直接输入网址进入

 
 此时会直接跳转回登陆页面,无法再进入。
 
(本文仅作跟人学习记录用,如有纰漏,敬请指正)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表