拦截器,利用拦截器进行登陆权限控制

拦截器,登录权限控制demo

    • 1. 拦截器demo
    • 2. 登录权限控制

地址:
https://github.com/sevenyoungairye/spring-mvc-interceptor

1. 拦截器demo

  • 什么是拦截器
拦截器基于是aop思想实现的。
针对controller里面的目标方法进行拦截。
对比过滤器是过滤所有请求,及静态资源。
  • 创建拦截器 实现HanlderInceptro接口

拦截器1

package cn.bitqian.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** spring mvc 拦截器入门* @author echo lovely* @date 2020/9/6 17:30*/
public class MyInterceptor1 implements HandlerInterceptor {// 在目标方法执行之前执行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {System.out.println("preHandler..");String param = request.getParameter("param");if ("yes".equals(param)) {return true;}// 参数错误跳转到错误的页面request.getRequestDispatcher("/error.jsp").forward(request, response);// 放行return false;}// 在目标方法执行之后,视图返回之前执行@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {// 可以在视图对象返回之前 修改modelif (modelAndView != null)  // 如果访问的目标资源没有 ModelAndView返回,会null pointermodelAndView.addObject("name", "bitQian adorable");System.out.println("post handler");}// 在所有流程执行完后 执行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("after completion");}
}

拦截器2

package cn.bitqian.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 拦截器2 与拦截器1构成链* @author echo lovely* @date 2020/9/6 21:40*/
public class MyInterceptor2 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("pre handle22222...");return true; // 经过拦截器2 放行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("post handle222222222...");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("completion222222...");}
}
  • 配置拦截器
 <!-- 拦截器 对controller中的目标方法进行拦截 --><mvc:interceptors><mvc:interceptor><!--对所有目标资源(那些资源)进行拦截--><!--<mvc:mapping path="/**"/>--><!--<mvc:mapping path="/*"/>--><mvc:mapping path="/target1"/><bean id="interceptor1" class="cn.bitqian.interceptor.MyInterceptor1"></bean></mvc:interceptor><!-- 拦截器1与拦截器2构成拦截器链 拦截器配置先后 决定拦截器执行的顺序 --><mvc:interceptor><mvc:mapping path="/target1"/><bean id="interceptor2" class="cn.bitqian.interceptor.MyInterceptor2"></bean></mvc:interceptor></mvc:interceptors>
  • 目标方法(controller)
package cn.bitqian.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;/*** 测试拦截器* @author echo lovely* @date 2020/9/6 17:42*/
@Controller
public class TargetController {@RequestMapping("/target1")public ModelAndView target1() {ModelAndView modelAndView = new ModelAndView();// 设置模型modelAndView.addObject("name", "bitqian");// 返回视图对象modelAndView.setViewName("demo1");System.out.println("target1 目标资源访问..");return modelAndView;}
}
  • 测试拦截器的拦截效果
    未带参数跳转到对应的页面

    当我带参数

2. 登录权限控制

  • 页面
<%--Created by IntelliJ IDEA.User: echo lovelyDate: 2020/9/7Time: 19:21用户登录页面
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>login page</title>
</head>
<body><form action="user/login" method="post">用户名:<input type="text" name="userName"/> <br/>密码:<input type="password" name="password"/> <br/><input type="submit" value="login"/></form></body>
</html>
  • user controller
package cn.bitqian.controller;import cn.bitqian.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;/*** @author echo lovely* @date 2020/9/7 19:15*/
@Controller
@RequestMapping(value = "/user")
public class UserController {@RequestMapping(value = "/login")public String login(String userName, String password, HttpSession session) {if ("bitqian".equals(userName) && "bitqian666".equals(password)) {User user = new User(userName, password);// 账号密码正确设置 将用户对象保存到session中session.setAttribute("user", user);return  "redirect:/index.jsp";}System.out.println(userName + "\t" + password);return "redirect:/login.jsp";}
}
  • 权限控制拦截器
package cn.bitqian.interceptor;import cn.bitqian.entity.User;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author echo lovely* @date 2020/9/7 19:42*/
public class AuthorityInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {User user = (User) request.getSession().getAttribute("user");if (user == null) {// 未登录跳转到登录页面response.sendRedirect("login.jsp");return false;}System.out.println("user permission..");return true;}
}
  • 对目标方法进行拦截,除login
<mvc:interceptors><!-- 用户是否登录 作用的拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><!-- 不拦截 login方法--><mvc:exclude-mapping path="/user/login"/><mvc:exclude-mapping path="/target1"/><bean class="cn.bitqian.interceptor.AuthorityInterceptor"></bean></mvc:interceptor>
</mvc:interceptors>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过CMD命令行创建和使用Android 模拟器 AVD

进行Android APP测试时&#xff0c;若手持android手机设备稀少的情况下&#xff0c;我们可以通过创建Android模拟器AVD来代替模拟android手机设备&#xff0c;本文就具体介绍如何创建和使用AVD。 1、创建AVD 每个AVD模拟一套虚拟设备来运行Android应用程序。无论…

前端学习(1188):事件绑定

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…

前端学习(1189):事件基本使用

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用法 -->&…

前端学习(1190):事件修饰符

传统方式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><!-- v-cloak用…

mybatis --入门 单表增删改查-curd

目录1. mybatis 环境搭建2. 实体类映射文件配置&#xff08;写sql&#xff09;3. mybatis核心配置文件 &#xff08;环境配置&#xff09;4. 测试mybatis document https://mybatis.org/mybatis-3/zh/ mybatis in github https://github.com/mybatis/mybatis-3 1. mybatis 环…

lvs-dr模式原理详解和可能存在的“假负载均衡”

原文地址&#xff1a; http://blog.csdn.net/lengzijian/article/details/8089661 lvs-dr模式原理 转载注明出处&#xff1a;http://blog.csdn.net/lengzijian/article/details/8089661 先附上一张原理图&#xff1a; 为了更清晰的表述lvs-dr原理&#xff0c;我们用tcpdump工具…

把一张合成图分拆出各个小图

反编译一个程序&#xff0c;看到一张合成图&#xff0c;想分拆出里面的每个小图&#xff0c;知道了各个图的坐标大小后&#xff0c;写了一个小方法&#xff0c;希望对大家有用哈 package com.bitimage;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStr…

mybatis TypeHandler 类型处理器

目录1. 自定义日期类型处理器2. 配置自定义日期处理器3. 新增&#xff0c;查询1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法&#xff0c; 来转换Java和数据库中的字段package cn.bitqian.config;import org.apache.ibatis.type.BaseTypeHandler; import…

稀疏表示

稀疏表示是近期几年信号处理领域的热点之中的一个&#xff0c;简单来说&#xff0c;它事实上是一种对原始信号的分解过程&#xff0c;该分解过程借助一个事先得到的字典&#xff08;也有人称之为过完备基&#xff0c;overcomplete basis&#xff0c;后面会介绍到&#xff09;&a…

ssm整合 durid数据源 报错java.sql.SQLException: Access denied for user ‘xxx‘@‘localhost‘

目录1、报错原因2、如何解决1、报错原因 连接数据库账号密码错误… 但我在jdbc.properties中检查账号&#xff0c; 密码都是正确的呀&#xff0c;&#x1f623; drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/mybatis_study?serverTimezoneGMT usernamer…

ssm整合 报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):xxx

目录1. 报错原因2. 解决3. 说明1. 报错原因 使用MapperScannerConfigurer扫描对应的mapper接口&#xff0c;帮我把mapper放入spring容器中&#xff0c;但是我的mapper映射文件并没有关联到sessionFactory中。 加载mybatis核心配置文件时&#xff0c; 其中的环境&#xff0c;数…

Teradata Fastload 使用方法

第一步&#xff1a; 首先打开 teradata fastload.exe 第二步&#xff1a; 通过粘贴导入脚本 脚本&#xff1a; SESSIONS 4; ERRLIMIT 25; SET RECORD VARTEXT ",";LOGON localhost/Teradata_Education,Educate; /* localhost:IP Address; Teradata_Education:user…

Java实现邮箱发送(阿里云邮箱推送)

Java mail邮箱发送1. 邮箱信息实体类2. jar包依赖3. 发送邮箱实现绑定阿里云域名&#xff0c;创建域名账户&#xff0c;并配置解析域名账户&#xff0c;获得发送邮箱的权限&#xff0c;上限两百封&#xff0c;超出要&#xffe5;… 阿里云邮件推送控制台https://www.aliyun.co…

Android组件系列----BroadcastReceiver广播接收器

​【声明】 欢迎转载&#xff0c;但请保留文章原始出处→_→ 生命壹号&#xff1a;http://www.cnblogs.com/smyhvae/ 文章来源&#xff1a;http://www.cnblogs.com/smyhvae/p/3960623.html 【正文】 一、广播的功能和特征 广播的生命周期很短&#xff0c;经过调用对象-->…

vue.js 入门,简介

vue的源代码下载——开发版本和生产版本 https://cn.vuejs.org/js/vue.jshttps://cn.vuejs.org/js/vue.min.js vue中文学习官网 https://cn.vuejs.org/v2/guide/ vue学习入门1. 什么是vue.js2. vue的要学的核心3. 我的第一个vue程序(&#xffe3;▽&#xffe3;)"1. 什么…

vue中的数据单向绑定,判断,循环,函数

vue基本语法1. 前言2. 数据绑定v-bind3. v-if || v-else-if || v-else 条件判断4. v-for 循环5. v-on 元素监听事件1. 前言 vue语法&#xff0c;基本照着官网的来的&#xff0c;也有一些看了b站某kuang的视频&#xff0c;受了些启发。 <div id"app">// 取dat…

Asp.Net MVC4入门指南(5):从控制器访问数据模型

在本节中&#xff0c;您将创建一个新的MoviesController类&#xff0c;并在这个Controller类里编写代码来取得电影数据&#xff0c;并使用视图模板将数据展示在浏览器里。 在开始下一步前&#xff0c;先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 用鼠标右键单…

vue双向数据绑定v-model绑定单选框,复选框,下拉框

v-model使用1. 简单的demo2. 三种框的绑定注意它是自动帮你确认值的&#xff01;&#xff01;&#xff01;无需关心过程&#xff0c;把json数据一丢到data中&#xff0c;自动选中。1. 简单的demo 实现一边在输入框输入&#xff0c;一边显示输入框的内容 2. 三种框的绑定 &l…