【Filter 不登陸無法訪問】web項目中寫一個過濾器實現用戶不登陸,直接給鏈接,無法進入頁面的功能


在web項目中寫一個過濾器實現用戶不登陸,直接給鏈接,無法進入頁面,而重定向到登陸界面的功能。

項目是用springMVC+spring+hibernate實現 (和這個沒有多大關系)

第一步

首先寫一個登錄權限過濾類--LoginFilter類實現Filter接口

 1 package com.agen.util;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
14 
15 import org.springframework.util.Assert;
16 import org.springframework.util.StringUtils;
17 
18 import com.agen.entity.User;
19 
20 /**
21  * 首先寫一個登錄權限過濾類--LoginFilter類實現Filter接口
22  * @author 申旭棟
23  *下面這三個方法是必須要實現的
24  */
25 public class LoginFilter implements Filter {
26 
27     @Override
28     public void init(FilterConfig filterConfig) throws ServletException {
29         // TODO Auto-generated method stub
30     }
31 
32     
33     @Override
34     public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
35         // 獲得在下面代碼中要用的request,response,session對象
36         HttpServletRequest servletRequest = (HttpServletRequest) request;
37         HttpServletResponse servletResponse = (HttpServletResponse) response;
38         HttpSession session = servletRequest.getSession();
39 
40         // 獲得用戶請求的URI
41         String path = servletRequest.getRequestURI();
42         
43         // 從session里取用戶
44         User user = (User) session.getAttribute("user");
45 
46         // 登陸頁面無需過濾
47         if("/biologyInfo/".equals(path) || "/biologyInfo/login/login1.htmls".equals(path)) {
48             chain.doFilter(servletRequest, servletResponse);
49             return;
50         }
51 
52         // 判斷如果沒有取到用戶信息,說明這個請求是沒有登錄就在請求     就跳轉到登陸頁面 
53         if (user == null) {
54             // 跳轉到登陸頁面
55             servletResponse.sendRedirect("/biologyInfo/login/login1.htmls");
56         } else {
57             // 已經登陸,繼續此次請求
58             chain.doFilter(request, response);
59         }
60 
61     }
62 
63     @Override
64     public void destroy() {
65         // TODO Auto-generated method stub
66     }
67 
68 }
View Code

第二步:

在web.xml中配置一下filter

 1 <!-- 配置 登陸 過濾器 -->
 2     <filter>
 3         <filter-name>login</filter-name>
 4         <filter-class>com.agen.util.LoginFilter</filter-class>
 5     </filter>
 6 
 7     <filter-mapping>
 8         <filter-name>login</filter-name>
 9         <url-pattern>*.htmls</url-pattern><!--此處寫/*代表瀏覽器地址欄中的所有請求都會被攔截 包括css文件和js文件                              .htmls這是僅攔截以.htmls結尾的請求 -->
10     </filter-mapping>
View Code

這樣這個過濾器就寫成了。

說明:

1.在web.xml中配置的filter的 <url-pattern>參數中的值,意思就是攔截的請求路徑,就是瀏覽器的地址欄中的URL,因為頁面上不論是頁面,還是js文件,還是css文件都是通過請求得到的。

 

 

2.而上面的web.xml中配置的 <url-pattern>*.htmls</url-pattern>表示攔截僅攔截.htmls結尾的URL,而將js或者css文件結尾的URL都放過。

3.而訪問頁面都是通過以下這樣的請求去訪問的頁面,

http://192.168.16.104:8080/biologyInfo/login/geneinfo.htmls

http://192.168.16.104:8080/biologyInfo/login/welcome1.htmls

而這些都是先去找了后台的controller,從服務器才去的頁面

貼出服務器端的代碼:

  1 package com.agen.controller;
  2 
  3 import java.util.UUID;
  4 
  5 import javax.annotation.Resource;
  6 import javax.servlet.http.HttpServletRequest;
  7 import javax.servlet.http.HttpSession;
  8 
  9 import org.hibernate.Criteria;
 10 import org.hibernate.Session;
 11 import org.hibernate.SessionFactory;
 12 import org.hibernate.criterion.Criterion;
 13 import org.hibernate.criterion.Restrictions;
 14 import org.springframework.beans.factory.annotation.Autowired;
 15 import org.springframework.http.HttpRequest;
 16 import org.springframework.stereotype.Controller;
 17 import org.springframework.ui.Model;
 18 import org.springframework.util.Assert;
 19 import org.springframework.web.bind.annotation.RequestMapping;
 20 import org.springframework.web.bind.annotation.ResponseBody;
 21 
 22 import com.agen.entity.User;
 23 import com.agen.service.AuthorityService;
 24 import com.agen.service.RoleService;
 25 import com.agen.service.UserSevice;
 26 import com.fasterxml.jackson.annotation.JsonCreator.Mode;
 27 
 28 
 29 @Controller()
 30 @RequestMapping("login")
 31 public class LoginController {
 32     
 33     @Resource(name="userSevice")
 34     private UserSevice userService;
 35     
 36     @Resource(name="roleService")
 37     private RoleService roleService;
 38     
 39     @Resource(name="authorityService")
 40     private AuthorityService authorityService;
 41     
 42     @Autowired
 43     private SessionFactory sessionFactory;
 44     
 45     public Session getCurrentSession() {
 46         // 需要開啟事物,才能得到CurrentSession  getCurrentSession()是獲取已有的 沒有  就創建新的
 47         return sessionFactory.getCurrentSession();
 48     }
 49     
 50     
 51     @RequestMapping("/login1")
 52     public String login(User user, Model model,HttpServletRequest request){
 53         if(user.getUserName()==null &&user.getPassword()==null){
 54             model.addAttribute("error", "0");
 55             return "../../../index";
 56         }else{
 57             Criteria criteria = getCurrentSession().createCriteria(User.class);
 58             criteria.add(Restrictions.eq("userName", user.getUserName()));
 59             User user2 = userService.uniqueResult(criteria);
 60             if(user2 == null) {
 61                 model.addAttribute("error", "1");
 62                 return "../../../index";
 63             } else if(!( user2.getPassword() .equals(user.getPassword()) )){
 64                 model.addAttribute("error", "2");
 65                 return "../../../index";
 66             }
 67             Assert.notNull(user);
 68             HttpSession session = request.getSession();
 69             session.setAttribute("user", user);
 70             return "/index/index";
 71         }
 72         
 73     }
 74     
 75     @RequestMapping("/register")
 76     @ResponseBody
 77     public boolean register(User user){
 78         boolean flag = false;
 79         user.setUserId(UUID.randomUUID().toString());
 80         Criteria criteria = getCurrentSession().createCriteria(User.class);
 81         criteria.add(Restrictions.eq("userName", user.getUserName()));
 82         User user2 = userService.uniqueResult(criteria);
 83         if(user2 != null){
 84             flag = false;
 85         }else{
 86             userService.save(user);
 87             flag = true;
 88         }
 89         return flag;
 90     }
 91     
 92     
 93     /**
 94      * 頁面二級菜單
 95      * @return
 96      */
 97     @RequestMapping("/welcome1")
 98         public String welcome(){
 99         
100         return "/index/welcome";
101     }
102     @RequestMapping("/geneinfo")
103     public String geneinfo(){        
104     return "/geneinfo/geneinfoone";
105     }
106     
107 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM