拦截器实现权限控制

本文介绍了如何在Spring MVC中实现拦截器进行权限验证。首先讲解了拦截器的注册过程,通过`InterceptorConfig`配置类将`LoginInterceptor`添加到Spring容器中。接着,展示了`LoginInterceptor`的实现,它在`preHandle`方法中检查session中的登录信息,如果未登录则返回false阻止后续处理。控制层`StudentController`提供了登录接口,业务层`StudentService`负责验证登录。通过这种方式,实现了对特定路径的权限拦截和控制。

目录

 拦截器(Interceptor)

1.1 注册拦截器 (拦截成功的才执行拦截器)

1.2 实现拦截器

2 编写权限验证拦截器

2.1 控制层

2.2 业务层 判断是否登录成功


 拦截器(Interceptor)

 1.1 注册拦截器 (拦截成功的才执行拦截器)

实现拦截器后还需要将拦截器注册到spring容器中,可以选择@Component 或者 @Configuration。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    /**
     * 注册自定义拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        //注册拦截器
        InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") //所有路径都被拦截
                .excludePathPatterns( "/student/studentLogin"); //不拦截的路径

    }
}

1.2 实现拦截器

一个拦截器,只有preHandle方法返回true,postHandle、afterCompletion才有可能被执行;如果preHandle方法返回false,则该拦截器的postHandle、afterCompletion必然不会被执行

执行顺序:addInterceptors -> preHandle -> 请求体 -> postHandle -> afterCompletion

2 编写权限验证拦截器

新建拦截器类PermissionInterceptor , 实现HandlerInterceptor 接口,即为自定义拦截器

public class LoginInterceptor implements HandlerInterceptor {


    @Autowired
    private StudentService studentService;

    //controller层之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();

        String adminName = (String)session.getAttribute("adminName");//获取储存的session
        if(adminName==null){
            System.out.println("请先登陆!");
            return false;
        }
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器1 postHandle: ");
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("拦截器1 afterCompletion: ");
    }
}

2.1 控制层

@RestController
@RequestMapping("student")
public class StudentController {
    /**
     * 服务对象
     */
    @Resource
    private StudentService studentService;

    @Autowired
    private HttpSession session;

    /**
     * @Description:
     * @Author: ZhouBo
     * @Date: 2022/8/16 0016 14:33
      * @param name
     */
    @GetMapping("studentLogin")
    public boolean selectOne(String name, String pwd) {

        return studentService.adminLogin(session,name,pwd);
    }

2.2 业务层 判断是否登录成功

/**
 * (Student)表服务实现类
 *
 * @author makejava
 * @since 2022-08-03 10:32:18
 */
@Service
public class StudentServiceImpl  extends ServiceImpl<StudentMapper, Student> implements StudentService {

    @Autowired
    StudentMapper studentMapper;

    @Override
    public boolean adminLogin(HttpSession session, String adminName, String adminPwd) {
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("adminName",adminName);
        queryWrapper.eq("adminPwd",adminPwd);
        List<Student> list = studentMapper.selectList(queryWrapper);
        if(list.size()!=0){
            session.setAttribute("adminName",adminName);
            return true;
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值