SpringMVC自定义拦截 器登录检测功能的实现代码
作者:~祝今在 发布时间:2023-07-27 18:33:05
标签:SpringMVC,自定义,登录
一、定义登录控制器
目录结构
代码:
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" rel="external nofollow" rel="external nofollow" >返回登录界面</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" rel="external nofollow" rel="external nofollow" >退出登录</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、非法请求
来源:https://blog.csdn.net/codeblank/article/details/119247408


猜你喜欢
- using System; using System.IO; namespace DelAllLrcFiles { class Progra
- 一、问题描述在接受 mq 消息的时候,需要做一个重试次数限制,如果超过 maxNum 就发邮件告警,不再重试。 所以我需
- 那些GC的默认值其实GC或者说JVM的参数非常非常的多,有控制内存使用的:有控制JIT的:有控制分代比例的,也有控制GC并发的:当然,大部分
- 最近经朋友介绍开始玩 密传 网络游戏 升级升级,突然觉得太费键盘,于是自己用C#写了一个程序,想代替我的操作,自己去打怪物,自己升级 用这个
- 本文实例总结了Android TextView字体颜色设置方法。分享给大家供大家参考,具体如下:对于setTextView(int a)这里
- private void txtBarCode_KeyPress(object sender, KeyPressEventArg
- 1.饿汉模式饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 ClassLoader
- 有些时候我们做的程序需要进度条,而vs提供的控件不是我们想要的。先看效果图:进度条闪烁动画,当然背景可设为Transparent之前想手绘进
- 前言事务对java开发的同学来说并不陌生,我们使用事务的目的在于避免产生重复数据或者说利用数据存储中间件的事务特性确保数据的精准性,比如大家
- 1.前言对于一个Android开发者来说,每一个页面都继承一个单独的系统Activity,有时候会带来很多不必要的困扰。比如:每一个页面会有
- (1)实际应用BeanUtils.copyProperties(赋值目标对象,模板源对象);我们都知道当有两个对象AB,属性名称一样的情况下
- 目录什么是Spring的占位符?Spring什么时候去解析并占位符什么是Spring的占位符?在以前的Spring Xml配置中我们可能会有
- 前言在java Thread类中,我们会看到interrupt()、interrupted()及isInterrupted(),在大多数情况
- 1. 异常1.1 try…catch异常处理try catch的异常处理的格式写法 :try{ &nbs
- 本文实例为大家分享了java实现饮料自助售货机的具体代码,供大家参考,具体内容如下①用户类import java.util.Scanner;
- 在很多系统开发中,我们希望在指定的方法调用之前或者之后能打印出该方法的调用时间以及方法的出参和入参,就可以使用spring的AOP,还可以结
- 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序
- 1.<constant name="struts.i18n.encoding" value="UTF-8
- 使用mybatis-plus自动生成了5个模块(xml/bean/mapper/service/controller)的代码,这里练习一下m
- 前言解释:之前用的ScreenToGif录屏,因为上传的.gif最大不超过5MB,所以做了不少删帧和色彩弱化等处理,这才导致色彩看上去不是很