Spring MVC拦截器实现用户登录权限验证案例
具体实现步骤如下:
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) { // 清除 session session.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 { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取请求的URL String url = request.getRequestURI(); // login.jsp或登录请求放行,不拦截 if (url.indexOf( /toLogin ) = 0 || url.indexOf( /login ) = 0) { return true; // 获取 session HttpSession 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; @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub @Override public 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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 使用扫描机制扫描控制器类 -- context:component-scan base-package= controller / !-- 配置视图解析器 -- bean > 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 /htmlmain.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 /html7)发布并测试应用首先将 springMVCDemo07 应用发布到 Tomcat 服务器并启动 Tomcat 服务器,然后通过地址 http://localhost:8080/springMVCDemo07/main 测试应用,运行效果如图 1 所示。
图 1 没有登录直接访问主页面的效果从图 1 可以看出,当用户没有登录而直接访问系统主页面时请求将被登录拦截器拦截,返回到登录页面,并提示信息。如果用户在用户名框中输入 zhangsan ,在密码框中输入 123456 ,单击 登录 按钮后浏览器的显示结果如图 2 所示。如果输入的用户名或密码错误,浏览器的显示结果如图 3 所示。
图 2 成功登录的效果
图 3 用户名或密码错误 当单击图 2 中的 退出 链接后,系统将从主页面返回到登录页面。22579.html
gohtmljavaJSPServletspringSpringMVCWeb
相关文章
- Spring学习笔记(五)——JdbcTemplate和spring中声明式事务
- spring boot自动配置原理面试题_Spring boot面试
- batch spring 重复执行_Spring Batch批处理
- Spring MVC框架:第一章:SpringMVC概述及初步体会SpringMVC使用过程
- Spring Webflux - 01 MVC的困境
- Spring-Security 简介、入门案例详解、安全框架、权限验证 SSM项目 使用 JavaConfig配置
- Java框架Spring入门-第一个spring项目
- Spring-AOP
- 【Spring源码】- 04 扩展点之BeanFactoryPostProcessor
- 徒手撸了个Spring Mini框架,真不错 | 极客时间
- Spring Cloud Config 故障排查与优化
- Spring Cloud Task 集成Spring Cloud Task Batch(二)
- Spring的构造函数注入简单案例详解编程语言
- Spring详解(六)——AspectJ 实现AOP编程语言
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途编程语言
- MyBatis Spring MapperScannerConfigurer 配置详解编程语言
- Spring Cloud之Swagger集群搭建详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- Spring query方法:用于JDBC查询
- spring使用Spring整合Redis和Jedis构建高性能应用(redisjedis与)