拦截器的使用,不登录用户不能进行其他操作

后台代码登陆成功以后将user存在session中

 1 @RequestMapping("login")
 2     @ResponseBody
 3     public String login( HttpSession session, User user, String code){
 4         Map<String, String> map = new HashMap<String, String>();
 5         String codes = (String) session.getAttribute("code");
 6 //        
 7         if (codes.equalsIgnoreCase(code)) {
 8             Md5Util m = new Md5Util();
 9             String pwd = m.GetMD5(user.getPwd());
10             User user2 = loginService.loginUser(user.getUserName(),pwd);
11             if (user2!=null) {
12                 session.setAttribute("user", user2);
13                 map.put("flg", "ok");
14             } else {
15                 map.put("flg", "error");
16             }
17         } else{
18             session.setAttribute("loginError", "验证码不一致");
19             map.put("flg", "error");
20         }
21         Gson gson = new Gson();
22         String json = gson.toJson(map);
23         return json;
24 
25         
26         
27     }
28 
29 
30     
View Code

springmvc-servlet ssm核心配置文件  添加配置

 1 <mvc:interceptors>
 2     <mvc:interceptor>
 3     <!-- 拦截的路径 /** 表示拦截所有请求  拦截的时候,path一定要有 /-->
 4         <mvc:mapping path="/**"/>
 5         <!-- 哪些路径不被拦截 -->
 6         <mvc:exclude-mapping path="/login"/>
 7         <mvc:exclude-mapping path="/code"/>
 8         <!-- 配置一个拦截器 配置一个class -->
 9         <bean class="com.demo.interceptor.MyInterceptor"></bean>
10     </mvc:interceptor>
11 </mvc:interceptors>
View Code

编写一个拦截器 判断session中有没有值

 1 package com.demo.interceptor;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.web.servlet.HandlerInterceptor;
 7 import org.springframework.web.servlet.ModelAndView;
 8 
 9 import com.demo.pojo.User;
10 
11 
12 
13 public class MyInterceptor implements HandlerInterceptor {
14     /**
15      * 执行完postHandle,才会执行afterCompletion。
16      */
17     @Override
18     public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
19             throws Exception {
20 //        System.out.println("afterCompletion");
21 //        System.out.println(arg2);
22 //        System.out.println(arg3);
23 //        System.out.println("-----------------------");
24     }
25 
26     /**
27      * 如果preHandle 返回true,则会执行postHandle方法。
28      */
29     @Override
30     public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
31             throws Exception {
32 //        System.out.println("postHandle");
33 //        System.out.println(arg2);
34     }
35 
36     /**
37      * preHandle 请求到达controller之前。
38      */
39     @Override
40     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
41 //        System.out.println("preHandle");
42         // 先取得值!如果登录了,则会有值,并且还要将值存储到session中。 从session中取得值。
43         // 取得到url的地址 相当于取得到 http://localhost:8080/08springmvc/login 地址
44 //        String url = request.getRequestURI();
45 //        System.out.println(url);
46         
47         // 取得session中的值。如果没有则不放行!
48         User user = (User) request.getSession().getAttribute("user");
49         
50         if (user != null) {
51             return true;
52         }
53         // 如果全部都是false,则继续登录
54         request.getRequestDispatcher("login.jsp").forward(request, response);
55         return false;
56     }
57 }
View Code

猜你喜欢

转载自www.cnblogs.com/xaoco/p/9121616.html