博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC拦截器
阅读量:5347 次
发布时间:2019-06-15

本文共 3097 字,大约阅读时间需要 10 分钟。

Spring MVC的interceptor拦截器拦截请求是通过实现HandlerInterceptor接口来完成的。

接来下举一个实例:

通过拦截器完成一个用户权限验证的功能—用户必须登录以后才能访问网站其他页面,如果没有登录就访问,则会被拦截器拦截,请求转发到登录页面并进行提示。

1.创建一个项目,导入相应的jar包,在web.xml中配置前端控制器。

2.编写一个实体类

private String username;private String password;

3.编写一个controller

@Controllerpublic class UserController {    @RequestMapping(value="/{pagename}")    public String pageName(@PathVariable String pagename){        return pagename;            }    @RequestMapping("login")    public ModelAndView login(String username,String password            ,ModelAndView mv,HttpSession session){                if(username!=null&&username.equals("aaa")&&password!=null&&password.equals("111")){            User user = new User();            user.setUsername(username);            user.setPassword(password);            session.setAttribute("user", user);            mv.setViewName("success");        }else{            mv.addObject("message", "账号或密码错误");            mv.setViewName("loginPage");        }        return mv;    }        @RequestMapping("success")    public String success(){        return "success";            }}

4.编写一个拦截器

public class UserInterceptor implements HandlerInterceptor{    /**     * 该方法在整个请求完成后执行,主要用来清理资源     * 该方法只能在当前interceptor的preHandler方法的返回值是true时才会执行     */    @Override    public void afterCompletion(HttpServletRequest arg0,            HttpServletResponse arg1, Object arg2, Exception arg3)            throws Exception {    }    /**     * 该方法在Controller的方法调用后执行,在视图被渲染以前被调用,所以可以用来对ModelAndView对象进行操作     * 该方法只能在当前interceptor的preHandler方法的返回值是true时才会执行     */    @Override    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,            Object arg2, ModelAndView arg3) throws Exception {    }    /**     * 该方法在请求之前被调用     * 该方法返回为true时拦截器才会继续往下执行     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,            Object handler) throws Exception {        //用于判断用户是否登录        boolean flag = false;                User user = (User) request.getSession().getAttribute("user");        if(user==null){            request.setAttribute("message", "请先登录");            request.getRequestDispatcher("loginPage.jsp").forward(request, response);        }else{            flag = true;        }        return flag;    }    }

5.配置springmvc-config.xml,在里面配置拦截器,配置拦截路径和不进行拦截的路径。

/
.jsp

6.编写登录页面和显示登录成功的页面,显示登录成功的页面只有在登录后才能访问,如果没有登录就访问将会被拦截。

${requestScope.message }
用户名:
密码:
     登陆成功!

7.测试

直接访问success页面被拦截

访问登录页面,因为配置了不进行拦截的路径,所以显示如下

输入账号密码登录成功

 

 源码下载路径 https://files.cnblogs.com/files/dj-blog/Interceptor.zip

 

转载于:https://www.cnblogs.com/dj-blog/p/7535835.html

你可能感兴趣的文章
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>