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

7983

被折叠的 条评论
为什么被折叠?



