JavaWeb使用Session和Cookie实现登录认证
发布时间 - 2026-01-11 00:14:00 点击率:次后台管理页面往往需要登录才可以进行操作,这时就需要Seession来记录登录状态

要实现起来也是非常简单,只需要自定义一个HandlerInterceptor就行了
自定义的HandlerInterceptor也只有短短几行代码
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception err)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
//获取session里的登录状态值
String str = (String) request.getSession().getAttribute("isLogin");
//如果登录状态不为空则返回true,返回true则会执行相应controller的方法
if(str!=null){
return true;
}
//如果登录状态为空则重定向到登录页面,并返回false,不执行原来controller的方法
response.sendRedirect("/backend/loginPage");
return false;
}
}
Controller代码
@Controller
@RequestMapping("/backend")
public class BackendController {
@RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
public String loginPage(HttpServletRequest request,String account, String password){
return "login";
}
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public String login(HttpServletRequest request,RedirectAttributes model, String account, String password){
//验证账号密码,如果符合则改变session里的状态,并重定向到主页
if ("jack".equals(account)&&"jack2017".equals(password)){
request.getSession().setAttribute("isLogin","yes");
return "redirect:IndexPage";
}else {
//密码错误则重定向回登录页,并返回错误,因为是重定向所要要用到RedirectAttributes
model.addFlashAttribute("error","密码错误");
return "redirect:loginPage";
}
}
//登出,移除登录状态并重定向的登录页
@RequestMapping(value = "/loginOut", method = {RequestMethod.GET})
public String loginOut(HttpServletRequest request) {
request.getSession().removeAttribute("isLogin");
return "redirect:loginPage";
}
@RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
public String IndexPage(HttpServletRequest request){
return "Index";
}
}
spring的配置
<!--省略其他基本配置-->
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置登陆拦截器 -->
<mvc:interceptor>
<!--拦截后台页面的请求-->
<mvc:mapping path="/backend/**"/>
<!--不拦截登录页和登录的请求-->
<mvc:exclude-mapping path="/backend/loginPage"/>
<mvc:exclude-mapping path="/backend/login"/>
<bean class="com.ima.Interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
一个简单的Session实现登录认证系统就这样完成了,如果想登录状态退出浏览器后仍保留一段时间的可以将Session改为Cookie
一般情况下我们都会使用Cookie
Cookie和Session的方法差不多
使用Cookie的自定义HandlerInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object obj, Exception err)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView mav) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
// 获取request的cookie
Cookie[] cookies = request.getCookies();
if (null==cookies) {
System.out.println("没有cookie==============");
} else {
// 遍历cookie如果找到登录状态则返回true执行原来controller的方法
for(Cookie cookie : cookies){
if(cookie.getName().equals("isLogin")){
return true;
}
}
}
// 没有找到登录状态则重定向到登录页,返回false,不执行原来controller的方法
response.sendRedirect("/backend/loginPage");
return false;
}
}
Controller的变化也不大
@Controller
@RequestMapping("/backend")
public class BackendController {
@RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
public String loginPage(HttpServletRequest request, String account, String password) {
return "login";
}
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public String login(HttpServletRequest request, HttpServletResponse response, RedirectAttributes model, String account, String password) {
if ("edehou".equals(account) && "aidou2017".equals(password)) {
Cookie cookie = new Cookie("isLogin", "yes");
cookie.setMaxAge(30 * 60);// 设置为30min
cookie.setPath("/");
response.addCookie(cookie);
return "redirect:IndexPage";
} else {
model.addFlashAttribute("error", "密码错误");
return "redirect:loginPage";
}
}
@RequestMapping(value = "/logOut", method = {RequestMethod.GET})
public String loginOut(HttpServletRequest request, HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("isLogin")) {
cookie.setValue(null);
cookie.setMaxAge(0);// 立即销毁cookie
cookie.setPath("/");
response.addCookie(cookie);
break;
}
}
return "redirect:loginPage";
}
@RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
public String IndexPage(HttpServletRequest request) {
return "Index";
}
}
spring的配置和之前的一模一样
注意
这里只是演示,建议在实际项目中Cookie的键和值要经过特殊处理,否则会引发安全问题
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java
# cookie
# session
# 登录
# cookie和session登录
# javaweb实现注册登录页面
# JavaWeb实现用户登录与注册功能(服务器)
# JavaWeb实现用户登录与注册功能
# JavaWeb简单用户登录注册实例代码(有验证码)
# javaWeb使用验证码实现简单登录
# javaweb项目如何实现手机短信登录
# 一文掌握JavaWeb登录认证
# 自定义
# 重定向
# 则会
# 为空
# 拦截器
# 遍历
# 要用
# 才可以
# 只需要
# 所要
# 设置为
# 没有找到
# 大家多多
# 后台管理
# 移除
# 基本配置
# 后仍
# 几行
# 完成了
# 就行了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
如何确保西部建站助手FTP传输的安全性?
北京网站制作的公司有哪些,北京白云观官方网站?
jquery插件bootstrapValidator表单验证详解
Android Socket接口实现即时通讯实例代码
简历在线制作网站免费版,如何创建个人简历?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
敲碗10年!Mac系列传将迎来「触控与联网」双革新
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何挑选优质建站一级代理提升网站排名?
iOS正则表达式验证手机号、邮箱、身份证号等
python中快速进行多个字符替换的方法小结
如何在建站主机中优化服务器配置?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何配置任务调度?(Cron Job示例)
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
微信小程序 wx.uploadFile无法上传解决办法
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
使用spring连接及操作mongodb3.0实例
如何在香港免费服务器上快速搭建网站?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
JS经典正则表达式笔试题汇总
如何续费美橙建站之星域名及服务?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
详解阿里云nginx服务器多站点的配置
bing浏览器学术搜索入口_bing学术文献检索地址
C++时间戳转换成日期时间的步骤和示例代码
郑州企业网站制作公司,郑州招聘网站有哪些?
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel怎么实现模型属性的自动加密
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
如何为不同团队 ID 动态生成多个非值班状态按钮
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
JavaScript如何操作视频_媒体API怎么控制播放

