详解Spring MVC拦截器实现session控制
发布时间 - 2026-01-10 22:23:44 点击率:次未登录,不允许访问background文件夹内的页面,那如何判断是否登录呢?background是关键目录,每个操作该目录的人都需要写在日志表中,如何实现呢?拦截器是实现方案之一。

(1) 在com.geloin.spring.interceptor包中添加SystemInterceptor,并使其继承HandlerInterceptor
/**
*
* @author geloin
*/
package com.geloin.spring.interceptor;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.embest.ruisystem.form.SystemLoggerForm;
import com.embest.ruisystem.form.SystemUserForm;
import com.embest.ruisystem.service.SystemLoggerService;
import com.embest.ruisystem.util.Constants;
import com.embest.ruisystem.util.DataUtil;
/**
*
* @author geloin
*/
@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter {
@Resource(name = "systemLoggerService")
private SystemLoggerService systemLoggerService;
/*
* (non-Javadoc)
*
* @see
* org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle
* (javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 后台session控制
String[] noFilters = new String[] { "login.html", "veriCode.html",
"index.html", "logout.html" };
String uri = request.getRequestURI();
if (uri.indexOf("background") != -1) {
boolean beFilter = true;
for (String s : noFilters) {
if (uri.indexOf(s) != -1) {
beFilter = false;
break;
}
}
if (beFilter) {
Object obj = request.getSession().getAttribute(
Constants.LOGINED);
if (null == obj) {
// 未登录
PrintWriter out = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
builder.append("alert(\"页面过期,请重新登录\");");
builder.append("window.top.location.href=\"");
builder.append(Constants.basePath);
builder.append("/background/index.html\";</script>");
out.print(builder.toString());
out.close();
return false;
} else {
// 添加日志
String operateContent = Constants.operateContent(uri);
if (null != operateContent) {
String url = uri.substring(uri.indexOf("background"));
String ip = request.getRemoteAddr();
Integer userId = ((SystemUserForm) obj).getId();
SystemLoggerForm form = new SystemLoggerForm();
form.setUserId(userId);
form.setIp(ip);
form.setOperateContent(operateContent);
form.setUrl(url);
this.systemLoggerService.edit(form);
}
}
}
}
Map paramsMap = request.getParameterMap();
for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it
.hasNext();) {
Map.Entry entry = it.next();
Object[] values = (Object[]) entry.getValue();
for (Object obj : values) {
if (!DataUtil.isValueSuccessed(obj)) {
throw new RuntimeException("有非法字符:" + obj);
}
}
}
return super.preHandle(request, response, handler);
}
}
(2) 修改context-dispatcher.xml,让spring管理拦截器
<mvc:interceptors> <bean class="com.geloin.spring.interceptor.SystemInterceptor" /> </mvc:interceptors>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# session
# 拦截
# session拦截器
# SpringMVC配置拦截器实现登录控制的方法
# Spring MVC--拦截器实现和用户登陆例子
# 使用spring拦截器实现日志管理实例
# Spring MVC 拦截器实现代码
# SpringMVC拦截器实现登录认证
# Spring AOP拦截-三种方式实现自动代理详解
# 拦截器
# 的人都
# 使其
# 写在
# 大家多多
# 如何实现
# 如何判断
# 包中
# SystemLoggerService
# DataUtil
# Constants
# private
# Javadoc
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
如何快速查询域名建站关键信息?
Swift中switch语句区间和元组模式匹配
Python高阶函数应用_函数作为参数说明【指导】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
网站图片在线制作软件,怎么在图片上做链接?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
MySQL查询结果复制到新表的方法(更新、插入)
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何用VPS主机快速搭建个人网站?
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
如何在阿里云域名上完成建站全流程?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel如何集成Inertia.js与Vue/React?(安装配置)
如何快速选择适合个人网站的云服务器配置?
如何为不同团队 ID 动态生成多个非值班状态按钮
如何在腾讯云服务器上快速搭建个人网站?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
简历没回改:利用AI润色让你的文字更专业
微信小程序制作网站有哪些,微信小程序需要做网站吗?
bootstrap日历插件datetimepicker使用方法
香港服务器网站推广:SEO优化与外贸独立站搭建策略
打造顶配客厅影院,这份100寸电视推荐名单请查收
UC浏览器如何设置启动页 UC浏览器启动页设置方法
创业网站制作流程,创业网站可靠吗?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何获取上海专业网站定制建站电话?
如何在IIS中新建站点并解决端口绑定冲突?
网站制作企业,网站的banner和导航栏是指什么?
如何将凡科建站内容保存为本地文件?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
实例解析angularjs的filter过滤器
中山网站制作网页,中山新生登记系统登记流程?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
,交易猫的商品怎么发布到网站上去?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何用AWS免费套餐快速搭建高效网站?
Android仿QQ列表左滑删除操作
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
EditPlus 正则表达式 实战(3)
如何快速上传自定义模板至建站之星?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解

