java之spring mvc之拦截器
1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的。
2. 自定义实现一个拦截器的步骤:
a). 定义一个实现 HandlerInterceptor 接口 的类
public class MyInterceptor implements HandlerInterceptor{ /** * 在处理方法之前执行,一般用来做一些准备工作:比如日志,权限检查 * 如果返回false 表示被拦截,将不会执行处理方法 * 返回true继续执行处理方法 */ @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { System.out.println("执行preHandler---------"+req.getRemoteHost()+req.getRemoteUser()); resp.sendRedirect("index.jsp"); return false; } /** * 在处理方法执行之后,在渲染视图执行之前执行,一般用来做一些清理工作 */ @Override public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object handler, ModelAndView mv) throws Exception { System.out.println("执行postHandler"); } /** * 在视图渲染后执行 一般用来释放资源 */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("执行afterCompletion"); } }
b) 在 springmvc 的配置文件中 ,添加拦截器配置
<mvc:interceptors> <!-- 定义一个拦截器的配置 --> <mvc:interceptor> <!-- mapping 指定哪些url被拦截 /*表示根路径下的所有请求被拦截-/hello.do /**表示根路径及其子路径下的所有请求被拦截/user/add.do --> <mvc:mapping path="/**"/> <!-- 配置拦截器的路径 --> <bean class="cn.sxt.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
c) 测试
3. 登录拦截器实现
public class LoginInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //验证请求的地址是否是登录地址 如果是继续往下执行 String uri=request.getRequestURI(); uri = uri.substring(uri.lastIndexOf("/")+1); if(uri.equals("login.do")){ return true; } //验证session中是否有用户存在 如果有 继续执行 if(request.getSession().getAttribute("username")!=null){ return true; } //执行跳转到登录页面 response.sendRedirect(request.getContextPath()+"/login.jsp"); return false; } }
分类:
java框架学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现