
拦截器的作用是在你的请求到达目标方法之前,对你的请求做一些检验,进行放行或不放行的 *** 作,也就是拦截用户请求并且进行响应的处理,比如权限验证,判断是否登录。
拦截器的实现有两种方法
1.实现接口HandlerInterceptor
2.继承适配器HandlerInterceptorAdapter
首先让我们看第一种方法,(新建一个包interceptor.MyInterceptor)很简单,你只需要定义一个类让这个类实现接口,然后用三个方法分别是
preHandler–preHandle方法…在目标方法执行前执行
postHandle–postHandle方法…在目标方法执行后,视图生成前执行
aftercompletion–afterCompletion方法…在目标方法执行后,视图生成后执行
我们常使用的是第一种,返回一个boolean值,如果返回ture表示放行,返回false表示阻止
我们现在写好了,但是还没有生效,需要去配置文件种定义拦截器
拦截器设置有两种方法,首先我们看第一种
<mvc:interceptors>
<bean class="com.openlab.springmvc.interceptor.MyInterceptor"/>
mvc:interceptors>
在mvc:interceptors标签中直接定义Bean标签
class执行拦截器的类路径,表示拦截所有的请求
然后我们看第二种拦截器的设置方法—,然后来一个简单的模拟,比如现在有一个用户模拟实现
- 用户登录
- 用户添加
- 用户修改
- 用户删除
用户添加修改前是不是必须得经过登录,不登陆不放行,所以我就必须得判断一下用户是否登录。如果没登录就重定向或请求转发到登录页面,登录就返回ture让你走
首先准备一个控制器叫UserController,上面先加上一个注解@Controller给他一个类路径@RequestMapping(“user”)
public String login()return到一个页面准备一个request对象设置请求域。准备success页面
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping("login")
public String login(HttpServletRequest request, HttpSession session){
request.setAttribute("msg","用户登录");
//如果用户登录则设置用户信息到Session作用域中-如果为空则为未登录,如果不为空则为登录状态
User user = new User();
user.setUsername("admin");
user.setUserId(1);
//设置到Session中
session.setAttribute("user",user);
return"succes";
}
@RequestMapping("add")
public String add(HttpServletRequest request){
request.setAttribute("msg","用户添加");
return"succes";
}
@RequestMapping("update")
public String update(HttpServletRequest request){
request.setAttribute("msg","用户update");
return"succes";
}
@RequestMapping("delete")
public String delete(HttpServletRequest request){
request.setAttribute("msg","用户delete");
return"succes";
}
创建一个LoginInterceptor这里我们继承适配器重写方法
如果用户是登录状态,则允许方法执行,那我们就得判断用户是否登录。登录之后就得有个用户状态,然后在拦截器中判断这个状态。我们把这个状态放到请求域中。
request不行,登陆后访问一次添加等 *** 作就需要重登录,所以我们把他放在session中,我们简单的塞一点信息。设置到作用域中名字只要判断时一直就行,现在存了只要没失效就可以在那边拿到,
public String login(HttpServletRequest request, HttpSession session){
request.setAttribute("msg","用户登录");
//如果用户登录则设置用户信息到Session作用域中-如果为空则为未登录,如果不为空则为登录状态
User user = new User();
user.setUsername("admin");
user.setUserId(1);
//设置到Session中
session.setAttribute("user",user);
return"succes";
}
通过request对象拿到session对象
HttpSession session = request.getSession();
获取sessi作用域中的用户信息
User user = (User) session.getAttribute("user");
判断uesr对象是由为空未登录跳转到登录页面。当前的项目下拼上地址
if (user == null) {
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
登录页面
然后让拦截器生效
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.openlab.springmvc.interceptor.LoginInterptor"/>
mvc:interceptor>
mvc:interceptors>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)