本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦截器将请求拦截,并转发到登录页面 login.jsp。当成功登录的用户在系统主页面中单击“退出”链接时回到登录页面。

具体实现步骤如下:

1)创建应用

创建 Web 应用 springMVCDemo07,并将 Spring MVC 相关的 JAR 包复制到 lib 目录中。

2)创建 POJO 类

在 springMVCDemo07 的 src 目录中创建 pojo 包,并在该包中创建 User 类,具体代码如下:

public class User {private String uname;private String upwd;//省略setter和getter方法
}

3)创建控制器类

在 springMVCDemo07 的 src 目录中创建 controller 包,并在该包中创建控制器类 UserController,具体代码如下:

package controller;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import pojo.User;
@Controller
public class UserController {/*** 登录页面初始化*/@RequestMapping("/toLogin")public String initLogin() {return "login";}/*** 处理登录功能*/@RequestMapping("/login")public String login(User user, Model model, HttpSession session) {System.out.println(user.getUname());if ("zhangsan".equals(user.getUname())&& "123456".equals(user.getUpwd())) {// 登录成功,将用户信息保存到session对象中session.setAttribute("user", user);// 重定向到主页面的跳转方法return "redirect:main";}model.addAttribute("msg", "用户名或密码错误,请重新登录! ");return "login";}/*** 跳转到主页面*/@RequestMapping("/main")public String toMain() {return "main";}/*** 退出登录*/@RequestMapping("/logout")public String logout(HttpSession session) {// 清除 sessionsession.invalidate();return "login";}
}

4)创建拦截器类

在 springMVCDemo07 的 src 目录中创建 interceptor 包,并在该包中创建拦截器类 LoginInterceptor,具体代码如下:

package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {// 获取请求的URLString url = request.getRequestURI();// login.jsp或登录请求放行,不拦截if (url.indexOf("/toLogin") >= 0 || url.indexOf("/login") >= 0) {return true;}// 获取 sessionHttpSession session = request.getSession();Object obj = session.getAttribute("user");if (obj != null)return true;// 没有登录且不是登录页面,转发到登录页面,并给出提示错误信息request.setAttribute("msg", "还没登录,请先登录!");request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;}@Overridepublic void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {// TODO Auto-generated method stub}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception {// TODO Auto-generated method stub}
}

5)配置拦截器

在 WEB-INF 目录下创建配置文件 springmvc-servlet.xml 和 web.xml。web.xml 的代码和 springMVCDemo07 一样,这里不再赘述。在 springmvc-servlet.xml 文件中配置拦截器 LoginInterceptor,具体代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 使用扫描机制扫描控制器类 --><context:component-scan base-package="controller" /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 配置拦截器 --><mvc:interceptors><mvc:interceptor><!-- 配置拦截器作用的路径 --><mvc:mapping path="/**" /><bean class="interceptor.LoginInterceptor" /></mvc:interceptor></mvc:interceptors>
</beans>

6)创建视图 JSP 页面

在 WEB-INF 目录下创建文件夹 jsp,并在该文件夹中创建 login.jsp 和 main.jsp。

login.jsp 的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>${msg }<form action="${pageContext.request.contextPath }/login" method="post">用户名:<input type="text" name="uname" /><br>密码:<input type="password" name="upwd" /><br><input type="submit" value="登录" /></form>
</body>
</html>

main.jsp 的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>当前用户:${user.uname }<br /><a href="${pageContext.request.contextPath }/logout">退出</a>
</body>
</html>

7)发布并测试应用

首先将 springMVCDemo07 应用发布到 Tomcat 服务器并启动 Tomcat 服务器,然后通过地址“http://localhost:8080/springMVCDemo07/main”测试应用,运行效果如图 1 所示。

从图 1 可以看出,当用户没有登录而直接访问系统主页面时请求将被登录拦截器拦截,返回到登录页面,并提示信息。如果用户在用户名框中输入“zhangsan”,在密码框中输入“123456”,单击“登录”按钮后浏览器的显示结果如图 2 所示。如果输入的用户名或密码错误,浏览器的显示结果如图3 所示。



当单击图 2 中的“退出”链接后,系统将从主页面返回到登录页面。

Spring MVC拦截器实现用户登录权限验证案例相关推荐

  1. java springmvc权限校验_springmvc拦截器实现用户登录权限验证

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

  2. 使用session监听+spring MVC拦截器禁止用户重复登录

    在许多web项目中,需要禁止用户重复登录.一般来说有两种做法: 一是在用户表中维护一个字段isOnLine(是否在线),用户登录时,设定值为true,用户退出时设定为false,在重复登录时,检索到该 ...

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

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

  4. Spring MVC拦截器~~~登陆验证拦截

    [ 30 分 钟 轻 松 入 门 Spring MVC][web 三 大 组 件 之 ~ ~ Filter 过 滤 器] Interceptor 拦截器学习: 1.了解spring mvc拦截器的概念 ...

  5. spring mvc 拦截器拦截jsp页面

    spring mvc 拦截器怎么拦截jsp页面 你这个 是拦截带 /jsp 的 .do请求 解决方案 用spring 的拦截器 去拦截 所有的 .do 请求, 然后写一个 过滤器去拦截 所有的.jsp ...

  6. spring mvc拦截器_Spring MVC拦截器示例

    spring mvc拦截器 我认为现在是时候看看Spring的MVC拦截器机制了,这种机制已经存在了很多年,并且是一个非常有用的工具. Spring Interceptor会按照提示说:在传入的HTT ...

  7. java spring登录验证_springMVC 用户登录权限验证实现过程解析

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...

  8. 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor

    [Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...

  9. Java Spring MVC框架 VIII 之 Spring MVC拦截器

    Java Spring MVC框架 VIII 之 Spring MVC拦截器 Spring MVC拦截器 1.拦截器简介 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后 ...

最新文章

  1. C++ STL之vector常用方法
  2. java 菜单快捷键_Java 菜单快捷键
  3. java核心api_Java核心API需要掌握的程度..你做到了多少??
  4. 湖南工业大学计算机专硕调剂,2020考研调剂:湖南工业大学生物信息实验室2020考研调剂信息...
  5. python复利代码_python复利
  6. 超三十万台设备感染银行木马、远程代码漏洞可攻击云主机|12月7日全球网络安全热点
  7. 开始Flex Builder 3
  8. java编写这个通讯录管理系统_Java如何实现通讯录管理系统
  9. Ubuntu 20.04/21.04 不能检测到外部HDMI显示器
  10. 中国二线城市有哪些比较知名的芯片设计企业
  11. Html form表单验证
  12. HTML入门基础(1)
  13. 20220630学习打卡
  14. C++初阶—STL简介
  15. Ancient Message (古埃及象形文字识别 Uva 1103)
  16. 雅腾php怎么样_2018年09月26日
  17. Lintcode 428. Pow(x, n) (Medium) (Python)
  18. Oracle存储过程语法和基本使用
  19. [日推荐]『装逼助手』一秒变土豪
  20. 无线传感网络 --ZigBee3-1 系统睡眠唤醒

热门文章

  1. VMware vSAN网络设计中不得不说的事
  2. 016.OpenStack及云计算(面试)常见问题
  3. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
  4. Kubernetes学习总结(10)—— 何为云原生,与 kubernetes 是什么关系
  5. Maven学习总结(10)——使用Maven编译项目gbk的不可映射问题
  6. mysql 压缩备份_备份压缩mysql 数据库
  7. 挑战程序设计竞赛(第2版)》
  8. 代码审计系列篇一之代码审计学习思路
  9. Vue 应用性能优化指南(转)
  10. Android彻底组件化方案实践