SSM项目使用 * 实现登录验证功能
作者:小奇Java面试 发布时间:2023-06-17 16:12:38
登录接口实现
public User queryUser(String UserName, String Password,HttpServletRequest request, HttpServletResponse response) {
User user = userMapper.queryUser(UserName,Password);
if(!StringUtils.isEmpty(user)){
//1.获取session
HttpSession session = request.getSession();
//2.获取sessionid
String sessionId = session.getId();
//3.将sessionid作为key,用户信息user作为value,放入session中
session.setAttribute(sessionId,user);
//4.将sessionId存到cookie中,"JSESSIONID"为自定义的key值
Cookie cookie = new Cookie("JSESSIONID",sessionId);
//5.设置cookie的有效路径
cookie.setPath(request.getContextPath());
//6.将cookie返回给页面
response.addCookie(cookie);
}
return user;
}
代码思路:
1.用户输入账号密码登录成功后获取用户信息(User)
2.获取session,得到sessionid(注:每一个session对象都有一个sessionid)
3.将sessionid作为key,用户信息(User)作为value,放入session中
4.创建一个Cookie对象,将"JSESSIONID"作为key,sessionId作为value,放入cookie中
5.设置cookie的有效路径,将cookie返回给页面,此时页面就可以收到key为"JSESSIONID",value为sessionId的cookie信息,如下图。
* 类代码实现
public class Filter extends HandlerInterceptorAdapter {
private static Logger logger = Logger.getLogger(Filter.class);
/**
* 进入 * 后首先进入的方法
* 返回false则不再继续执行
* 返回true则继续执行
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception
{
//1.定义sessionid变量
String sessionid = "";
//2.获取session对象
HttpSession session=request.getSession();
//3.获取页面上所有的cookie
Cookie[] cookies = request.getCookies();
//4.循环寻找名称为"JSESSIONID"的cookie
for(Cookie cookie:cookies){
if(cookie.getName().equals("JSESSIONID")){
sessionid = cookie.getValue();
}
}
//5.根据sessionid获取用户信息
User user = (User) session.getAttribute(sessionid);
if(StringUtils.isEmpty(user)) {
logger.info("用户未登录");
//用户未登录跳转到登录页面
response.sendRedirect("login");
return false;
}
logger.info("用户已登录");
return true;
}
}
代码思路:
1.自定义一个 * 类,首先要继承HandlerInterceptorAdapter,并重写preHandle方法,在此方法中编写 * 的逻辑代码
2.获取cookies数组,这个数组有浏览器中的所有cookies信息,循环遍历找到name为"JSESSIONID"的cookies,并获取到其value值,这个值就是sessionid
3.通过sessionid查找user对象,如果能获取对象证明登录过,如果不能获取到对象证明没有登录过
4.如果登录过就直接访问接口,如果没有登录过就跳转到登录页面进行登录
配置文件实现
<!--自定义 * -->
<mvc:interceptors>
<mvc:interceptor>
<!--配置要拦截的路径-->
<mvc:mapping path="/**"/>
<!--配置登录接口不被拦截-->
<mvc:exclude-mapping path="/user/login"/>
<!--指定 * 类路径-->
<bean class="com.lishiqi.Util.Filter"></bean>
</mvc:interceptor>
</mvc:interceptors>
配置含义:
1.我们使用 * 肯定要规定拦截哪些接口,首先我们将所有的接口都拦截
2.然后我们发现问题,此时登录接口也在拦截范围中,所以我们正常调用登录接口之前他也会拦截判断一下用户是否登录过,这个时候用户肯定没有登录过,那么就会又跳转到登录界面,我们再次登录还是跳转到登录页面,一直登录不上,所以我们需要把登录接口配置为不拦截
3.然后我们指定我们配置好的 * 类路径,这个时候可以在该类中进行登录验证操作了
4.此配置文件为spring-mvc.xml配置文件
来源:https://segmentfault.com/a/1190000041323617
猜你喜欢
- 以前使用MyEclipse已经习惯了,后来改成Eclipse感觉怪怪的。在创建web项目之前首先配置好jdk环境和tomcat环境(即在开发
- 介绍Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。Spring Cache提供了一
- 摘要:在spring boot中 MVC这部分也有默认自动配置,也就是说我们不用做任何配置,那么也是OK的,这个配置类就是 WebMvcAu
- MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundatio
- Gradle和Maven都是当前热门的自动化构建工具。使用Gradle去构建项目,由于没有办法像Maven一样配置Setting文件来修改本
- 话不多说,请看代码:package com.lxj.demo;import java.io.BufferedReader;import ja
- Filter简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所
- WCF实例(带步骤) <xmlnamespace prefix ="o" ns ="urn:schema
- 具体安装步骤,不再赘述,仅附上个人工作、学习中的对 EasyCode 的详细配置。插件链接地址:https://gitee.com/make
- 介绍:上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置
- 本文介绍Android中的5种数据存储方式。数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是
- 一、示例代码访问 localhost:8080/jsonTest —— 返回 json 格式的数据@
- 本文实例为大家分享了swing登录注册界面展示的具体代码,供大家参考,具体内容如下开发环境:Eclipse Neon.3 Release (
- 一.RabbitMQ消息丢失的三种情况第一种:生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 实现了 Map 接口,根据键的 HashCod
- 1. 二叉树的顺序存储1.1 存储方式使用数组保存二叉树结构,方式即将二叉树用 层序遍历 方式放入数组中。一般只适合表示完全二叉树,这种方式
- java实现接口签名为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约定好密钥,把数据进行加密,接口签名,这样双方调用接口时,验
- 在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。下面通过两个例子来分析两者的区别:1)继承Thread类p
- 最近一段时间生产环境频繁出问题,每次都会生成一个hs_err_pid*.log文件,因为工作内容的原因,在此之前并没有了解过相关内容,趁此机
- 前言在java里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对