SpringMVC--自定义拦截器--登录检测

SpringMVC使用拦截器(Interceptor)实现用户登录校验 在系统中,经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中。当然不仅仅这些,所以需要一种机制,拦截用户的请求,在请求的前后添加处理逻辑。 SpringMVC提供了Interceptor拦截器机制,用于请求的预处理和后处理。在SpringMVC中定义一个拦截器有两种方法:第一种是实现HandlerInterceptor接口,或者继承实现了Handler... 阅读详情

一、定义登录控制器

目录结构

在这里插入图片描述

代码:

1、创建TUser类

package com.demo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TUser {
    private String name;
    private String password;
}

2、创建LoginController类

package com.demo.controller;

import com.demo.pojo.TUser;
import com.demo.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/user")
public class LoginController {
    @RequestMapping("/login")
    public String login(Model model){
        model.addAttribute("msg","这里是登陆界面");
        return "login";
    }

    @RequestMapping("/doLogin")
    public String doLogin(TUser tUser,
                          HttpServletRequest req, HttpServletResponse resp, Model model){
        System.out.println("###LoginController.doLogin()");

        if(!"admin".equals(tUser.getName())||!"admin".equals(tUser.getPassword())){
            model.addAttribute("msg","用户名或密码不正确!");
            return "loginFail";//跳转到loginFail.jsp
        }

        HttpSession httpSession=req.getSession(true);//存在session则使用,不存在则创建
        httpSession.setAttribute("user",tUser);
        model.addAttribute("msg","登录成功");
        return "success";//跳转到success.jsp
    }

    @RequestMapping("/loginOut")
    public String loginFail(HttpSession session,Model model){
        model.addAttribute("msg","退出登录");
        session.removeAttribute("user");
        return "login";
    }

}

页面代码:

1、login.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login</title>
</head>
<body>
<h1>${msg}</h1>
<form id="login" action="${pageContext.request.contextPath}/user/doLogin" method="post">
    用户名:<input type="text" name="name"/><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit">
</form>

</body>
</html>

2、loginFail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>loginFail</title>
</head>
<body>
<h1>${msg}</h1>
<h2><a href="${pageContext.request.contextPath}/user/loginOut">返回登录界面</a></h2>
</body>
</html>

3、success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
${msg}
<h2><a href="${pageContext.request.contextPath}/user/loginOut">退出登录</a></h2>
</body>
</html>

二、自定义登录拦截器

代码:

1、创建LoginInterceptor类,作为拦截器类需实现HandlerInterceptor,并重写里面的三个方法preHandle、postHandle、afterCompletion:

package com.demo.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("LoginInterceptor preHandle");
        //放行:判断什么情况下
        //1、请求到登陆界面放行,首次登陆
        if(request.getRequestURI().contains("login")||request.getRequestURI().contains("doLogin")){
            return true;
        }
        //2、退出登录可直接放行
        if(request.getRequestURI().contains("loginOut")){
            return true;
        }
        //3、通过登录进入 放行
        if(request.getSession().getAttribute("user")!=null){
            return true;
        }
        //非法请求进行拦截
        //重定向到登录页面
        response.sendRedirect(request.getContextPath()+"login");
        //拦截
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("LoginInterceptor  "+"postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        System.out.println("LoginInterceptor  "+"afterCompletion");
    }
}

2、在spring-mvc.xml中配置LoginInterceptor拦截器

测试:

1、正常登录(正确密码:admin)

在这里插入图片描述

1.1、点击退出登录

在这里插入图片描述

2、用户名密码错误

在这里插入图片描述

2.1、点击返回登录界面

在这里插入图片描述

3、非法请求
在这里插入图片描述

spring mvc 和spring security自定义登录 使用spring mvc 和spring security 完成简单的自定义登录 立即下载

相关推荐

springmvc(自定义拦截器的使用)

文档内有springmvc拦截器的配置

SpringMVC自定义拦截器

SpringMVC自定义拦截器

chencourage的博客 453

WSL2 Ubuntu复现FoundationPose项目(docker)

复现一个基于深度学习的物体姿态估计框架FoundationPose项目,使用docker,WSL2

woaidawangwang的博客 1998

[springMVC学习]11、自定义拦截器

在springMVC中我们可以自定义拦截器来对请求进行拦截,进行相应的处理 拦截器执行流程 拦截器是一个接口,里面有3个方法 preHandle:在目标handler执行前调用 postHandle:在目标handler执行完成后进行调用 afterCompletion:在视图渲染后调用拦截器可以对请求的一些消息进行过滤,也可以在视图渲染之后执行一些释放的操作,拦截器可以说是和过滤器十分的相似。...

秃头披风侠的博客 1211

docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

m0_55333789的博客 1556

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 798

【SpringMVC】拦截器

这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request 进行处理。:这个方法在目标方法处理完请求后执行。:这个方法在完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。到这里不知道大家有没有发现,这个SpringMVC中的拦截器和我们学Servlet时的Filter过滤器有点像。至于这个问题我们后边说到。如果preHandle方法 返回 false, 则不再执行目标方法, 可以在此指定返回页面。postHandle在目标方法被执行后执行。

喃灬疯的博客 895

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5422

SpringMVC进阶(自定义拦截器以及异常处理)

import org/*** @author 孙显圣*/ @Component //注入容器 public class Myinterceptor01 implements HandlerInterceptor {/*** 在目标方法执行前被调用,如果返回false,目标方法不会被执行* @return} /*** 在目标方法执行后被调用,可以获取目标方法返回的ModelAndView,可以根据业务进行二次处理} /*** 在渲染之后会被调用,可以进行资源清理工作。

Sun的个人博客 3844

遥感大模型核心技术之自监督预训练技术研究(2025年9月版)

本文系统探讨了自监督预训练技术在遥感大模型构建中的核心作用。随着遥感数据进入"大数据"时代,传统监督学习面临"数据丰富、标签贫乏"的瓶颈,而自监督预训练通过设计代理任务从无标签数据中学习特征表示,成为驱动大模型发展的关键引擎。文章分析了遥感领域对自监督预训练的三大独特挑战:多源异构性、地理空间约束和时空动态性,并提出了针对性解决方案:掩码自编码(MAE)技术及其演进、地理对比学习与多模态融合、位置感知预训练与多任务学习。

panshengwu的博客 841

蓝桥杯算法:打印图形——六芒星

【输入格式】 输入一行包含一个整数 n。 【输出格式】 输出一个六芒星,表示满足题意的图形。 【样例输入】 3 4 【样例输出】 【评测用例规模与约定】 对于所有评测用例,1 ≤ n ≤ 20。 总结: 第一次做图形题,做了蛮久,图形题有很多的方式去完成,它考验的是你能不能找到更简单的那一种方式. 我初看到这个图形,第一种想法是把这个六芒星当做六个小三角形来做,然后以某种规则排列一下,就能做出来,但是尝试了一下感觉太麻烦了。 然后我的第二种想法是,这个图形是对称图形,怎么能写出一半吗? 这样另一半想办

KeepCodeing 3835

SpringMVC 拦截器

SpringMVC 拦截器

快乐的小三菊的博客 3615

使用linuxdeployqt打包Qt程序问题及解决方法

安装过程中提示缺少依赖multiarch-support: 下载对应依赖包。安装过程中提示缺少libpq.so.5: 下载对应依赖包。下载libmysqlclient18/5.6.25。

weixin_74239923的博客 1058

【SpringMVC】| SpringMVC拦截器

【SpringMVC】| SpringMVC拦截器

m0_61933976的博客 2660

Win10系统怎么打开Microsoft帐户?Win10系统打开Microsoft的帐户方法

也被加入了越来越多的功能,我们在使用电脑的时候,很对用户会打开Micorsofy账户功能,搜索个人邮件信息,照片等等,还能将个人的数据备份到账户内,那要怎么打开账户呢,下面带给大家方法。以上就是小编给大家整理的win10系统打开Microsoft帐户的具体操作方法,方法简单易懂,有需要的朋友可以看一看,希望这篇教程对大家有所帮助。5、最后我们将“Microsoft帐户”选项下方的开关按钮向右滑动将其打开,如下图所示,这样就成功打开wMicrosoft帐户功能了。我们在窗口左侧点击“设置”选项即可。

2401_88800025的博客 278

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring mvc Interceptor 拦截器学习

SpringMVC中的interceptor可以说是过滤器的一部分,可以用来进行权限认证或登录检测等 (一)定义interceptor类 1.通过实现handleInterceptor接口或者继承实现了handleinterceptor接口的类 2.通过实现webrequestInterceptor接口或者继承实现了webrequestInterceptor接口的类 一.实现handleInter...

c630843901的博客 198

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

过滤器,拦截器,监听器的区别

一.过滤器 二.拦截器 三.监听器 拦截器和过滤器的区别 过滤器和拦截器的区别:   ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。   ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。   ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。   ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。   ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。   ⑥拦截器可以获取...

从2026-09-21开始专注于AI,以前是后端研发、大数据研发等 1769

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringMVC——自定义拦截器、异常处理以及父子容器配置

自定义拦截器: 一、若想实现自定义拦截器,需要实现org.springframework.web.servlet.HandlerInterceptor 接口。 二、HandlerInterceptor API 1. 接口中定义了三个方法 2.preHandle() (1)调用时机 在org.springframework.web.servlet.DispatcherServl...

weixin_30535167的博客 167

SSM第三季-SpringMVC-拦截器&静态资源放行&RestFul风格开发

SpringMVC 拦截器 配置拦截器 单一拦截器执行流程图 SpringMvc中的拦截器: a) SpringMvc拦截器帮我们按照一定规则拦截请求,后根据开发人员自定义的拦截逻辑进行处理; b) 自定义拦截器需要实现HandlerInterceptor接口; c) 自定义的拦截器实现类需要在SpringMvc配置文件中配置; d) 可以配置多个拦截器,配置的顺序会影响到拦截器的执行顺序,配置在前的先执行; e) HandlerInterceptor有3个接

Aqours的博客 1074

SpringMVC04 —— SpringMVC拦截器&拦截器案例

SpringMVC拦截器 1、什么是拦截器   在系统中,经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中,即平时所说的“权限检测”及“日志记录”。当然不仅仅这些,所以需要一种机制,拦截用户的请求,在请求的前后添加处理逻辑。   Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时

春和的博客 2351

SpringMVC拦截器

拦截器是 `SpringMVC` 提供的一个组件,它允许我们在请求到达处理方法之前或之后,对请求拦截并进行预处理或后处理。拦截器可以帮助我们实现许多功能,如用户权限验证、记录日志、处理异常等。

是程序喵呀 2942

springmvc拦截器

SpringMVC中的interceptor拦截器,它主要的作用是拦截指定的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前。”当然处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。...

weixin_48826996的博客 8904

SpringMVC之拦截器

一、什么是拦截器? SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。 二、拦截器与过滤器 2.1 什么是过滤器(Filter) 依赖于servlet容器。在实现上基于函数回调...

weixin_64987028的博客 7655

SpringMVC中利用拦截器进行用户登录检测

/*10 用户验证 */ @RequestMapping("/login.action") public String login(HttpSession session,HttpServletResponse res , User u) { System.out.println("收到了用户:"+u); String username = u.getU_username(); s...

qq_42986414的博客 361

Spring MVC拦截器(Interceptor)

在系统中,经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中,即平时所说的“权限检测”及“日志记录”。当然不仅仅这些,所以需要一种机制,拦截用户的请求,在请求的前后添加处理逻辑。 Spring MVC 提供了 Interceptor 拦截器机制,用于请求的预处理和后处理。 在开发一个网站时可能有这样的需求:某些页面只希望几个特定的用户浏览。对于这样的访问权限控制,应该如何实现呢?拦截器就可以实现上述需求。在 Struts2 框架中,拦截器是其重要的组成部分,Spr

m0_53698336的博客 1万+
上一篇: html--怎么修改select标签下的option标签内的内容
下一篇: CLion for mac安装与使用
~祝今在
博客等级 码龄7年 597粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~祝今在

喝个茶水

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值