本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现

当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面

核心代码

首先是index.jsp,显示链接

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%
3 String path = request.getContextPath();
4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
5 %>
6
7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
8 <html>
9 <head>
10 <base href="<%=basePath%>">
11
12 <title>首页</title>
13 <meta http-equiv="pragma" content="no-cache">
14 <meta http-equiv="cache-control" content="no-cache">
15 <meta http-equiv="expires" content="0">
16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17 <meta http-equiv="description" content="This is my page">
18 <!--
19 <link rel="stylesheet" type="text/css" href="styles.css">
20 -->
21 </head>
22
23 <body>
24 <div style="margin:0 auto;padding-top:100px;font-size:18px;" align="center">
25 <p><a href="loginpage.html">登陆</a></p>
26 <p><a href="user/home.html">用户中心</a></p>
27 <p><a href="exception.html">触发异常</a></p>
28 </div>
29 </body>
30 </html>

controller类

 1 package com.jikexueyuan.demo.springmvc.lesson4.controller;
2
3 import javax.annotation.Resource;
4 import javax.servlet.http.HttpServletRequest;
5
6 import org.springframework.stereotype.Controller;
7 import org.springframework.web.bind.annotation.RequestMapping;
8 import org.springframework.web.bind.annotation.RequestMethod;
9 import org.springframework.web.bind.annotation.RequestParam;
10
11 import com.jikexueyuan.demo.springmvc.lesson4.constant.Global;
12 import com.jikexueyuan.demo.springmvc.lesson4.exception.MyException;
13 import com.jikexueyuan.demo.springmvc.lesson4.model.User;
14 import com.jikexueyuan.demo.springmvc.lesson4.service.LoginService;
15
16 /**
17 * 这个例子讲解了如何定义MVC三层注解,使用@Resource进行注入,以及使用@RequestMapping、@RequestParam 、@SessionAttributes
18 */
19
20 @Controller
21 public class LoginController extends BaseController {
22
23 @Resource
24 LoginService service;
25
26 @Resource
27 HttpServletRequest request;
28
29 @RequestMapping("/exception")
30 public void exception() throws MyException{
31 throw new MyException("测试springmvc中的异常捕获");
32 }
33
34 @RequestMapping("/loginpage")
35 public String toLoginPage(){
36 return "/WEB-INF/jsp/login.jsp";
37 }
38
39 @RequestMapping("/user/home")
40 public String toUserHome(){
41 return "/WEB-INF/jsp/userhome.jsp";
42 }
43
44 @RequestMapping("/logout")
45 public String logout(){
46 request.getSession().removeAttribute(Global.USER_SESSION_KEY);
47 return "redirect:/";
48 }
49
50 @RequestMapping(value = "/doLogin", method = RequestMethod.POST)
51 public String doLogin(@RequestParam String userName, @RequestParam String password){
52
53 try {
54 User user = service.doLogin(userName, password);
55 request.getSession().setAttribute(Global.USER_SESSION_KEY, user);
56 return "redirect:/user/home.html";
57 } catch (Exception e) {
58 return "/WEB-INF/jsp/login.jsp";
59 }
60
61 }
62
63 }

当点击用户中心时,触发拦截,相关配置如下

在spring-mvc.xml中加上拦截配置,拦截所有URL中包含/user/的请求,当然请求用户中心时就会触发这个拦截器了

1     <mvc:interceptors>
2 <mvc:interceptor>
3 <!-- 拦截所有URL中包含/user/的请求 -->
4 <mvc:mapping path="/user/**"/>
5 <bean class="com.jikexueyuan.demo.springmvc.lesson4.interceptor.LoginInterceptor"></bean>
6 </mvc:interceptor>
7 </mvc:interceptors>

然后是bean指向的具体的interceptor类,如果session保存的用户信息为null,则跳到login页面,postHandle和afterCompletion方法都不执行,反之都执行。

 1 package com.jikexueyuan.demo.springmvc.lesson4.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.jikexueyuan.demo.springmvc.lesson4.constant.Global;
10
11 public class LoginInterceptor implements HandlerInterceptor {
12
13 @Override
14 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
15 Object user = request.getSession().getAttribute(Global.USER_SESSION_KEY);
16 if (user == null) {
17 System.out.println("尚未登录,调到登录页面");
18 response.sendRedirect("/loginpage.html");
19 return false;
20 }
21
22 return true;
23 }
24
25 @Override
26 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
27 System.out.println("postHandle");
28 }
29
30 @Override
31 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
32 System.out.println("afterCompletion");
33 }
34
35 }

至此,简单的springmvc拦截器就完成了。

SpringMVC拦截器实现用户登录拦截的更多相关文章

  1. spring boot 使用拦截器 实现 用户登录拦截

    登录拦截和和权限拦截实现类似   首先自定义一个[DefineAdapter]类,这个类我是用来放自定义的配置(比如 自定义请求参数,自定义拦截器等),集成WebMvcConfigurerAdapte ...

  2. Springboot 拦截器配置(登录拦截)

    Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口   HandlerInterceptor, 重写里面需要的三个比较常用的方 ...

  3. springMVC使用拦截器检查用户登录

    参考文章 编写拦截器类 package cultivate_web.interceptor; import javax.servlet.http.HttpServletRequest; import ...

  4. springmvc拦截器实现用户登录权限验证

    实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 package cn.lzc.po; public class User { pri ...

  5. 系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

    项目名称:客户管理系统 项目描述: 项目基于javaEE平台,B/S模式开发.使用Struts2.Hibernate/Spring进行项目框架搭建.使用Struts中的Action 控制器进行用户访问 ...

  6. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...

  7. springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置

    web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战

    笔记 10.Springboot2.x用户登录拦截器开发实战     简介:实战开发用户登录拦截器拦截器 LoginInterceptor                  1.实现接口 LoginI ...

  9. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

随机推荐

  1. Unity Dotween build error

    unity这东西感觉挺坑 在mac上build的时候遇到error IL2CPP error for method 'System.Void DG.Tweening.DOTweenPath::DORe ...

  2. Mac eclipse安装SVN javaHL not available的解决方法

    在Mac下安装Eclipse插件svnEclipse插件后,每次打开Eclipse都会弹出如下弹出框: 提示你本机缺少JavaHL Library. 选择Eclipse→偏好设置(preference ...

  3. 网页计算器 && 简易网页时钟 && 倒计时时钟

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Win7安装了Visual Studio 2008没有快捷方式怎么办

    在C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE,就是这个devenv.exe了  

  5. 微信小程序 - 一种简写方式

    // 第一种 isOrder: function() { //code }, // 第二种 isOrders() { //code },

  6. mysql 修复

    /home/wkubuntu/mysql/data/iZ25sgya7raZbak.pid  pid 文件notfond 错误解决 一.截图 snipingtool skip-locking 修改成 ...

  7. Android轻量级日志管理框架

    代码地址如下:http://www.demodashi.com/demo/12134.html ViseLog Android 轻量级日志框架,使用森林对象维护不同的日志树进行日志输出,可以是Logc ...

  8. zxing学习笔记 android入门

    对于刚开始学习android开发的童鞋们来说,若有一个简单而又全面的android工程能来剖析,那就是再好不过了,zxing就是不错得例子.    zxing的源码可以到google code上下载, ...

  9. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  10. 篇章二:[AngularJS] 使用AngularAMD動態載入Service

    前言 「使用AngularAMD動態載入Controller」:這篇文章裡介紹如何使用AngularAMD來動態載入Controller.本篇文章以此為基礎,介紹如何使用AngularAMD來動態載入 ...