栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

【无标题】

Java 更新时间:发布时间: 百科书网 趣学号

拦截器的作用是在你的请求到达目标方法之前,对你的请求做一些检验,进行放行或不放行的操作,也就是拦截用户请求并且进行响应的处理,比如权限验证,判断是否登录。
拦截器的实现有两种方法
1.实现接口HandlerInterceptor
2.继承适配器HandlerInterceptorAdapter
首先让我们看第一种方法,(新建一个包interceptor.MyInterceptor)很简单,你只需要定义一个类让这个类实现接口,然后用三个方法分别是
preHandler–preHandle方法…在目标方法执行前执行
postHandle–postHandle方法…在目标方法执行后,视图生成前执行
aftercompletion–afterCompletion方法…在目标方法执行后,视图生成后执行
我们常使用的是第一种,返回一个boolean值,如果返回ture表示放行,返回false表示阻止
我们现在写好了,但是还没有生效,需要去配置文件种定义拦截器
拦截器设置有两种方法,首先我们看第一种


    

在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;
}

登录页面
然后让拦截器生效


    
        

    
    

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/888359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号