1、登陆拦截器案例
1、自定义拦截器
public class LoginHandlerInterceptor implements HandlerInterceptor { /** * * @param request * @param response * @param handler * @return * @throws Exception * 在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用。 * 如日志记录、登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如何去使用的呢,我们一起试试 * 首先,我们去创建一个名为LoginInterceptor的拦截器,来过滤请求,我们创建的拦截器要去实现HandlerInterceptor接口, * 然后定义我们的方法 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //拦截路径方法 HandlerMethod handlerMethod = (HandlerMethod) handler; // 这里报异常说明url匹配不到,springboot2.0修改为资源访问 Method method = ((HandlerMethod) handler).getMethod(); String methodName = method.getName(); System.out.println("拦截的方法"+methodName); // 通过方法,可以获取该方法上的自定义注解,然后通过注解来判断该方法是否要被拦截 // @UnInterception 是我们自定义的注解 // @UnInterception 是我们自定义的注解 UnInterception unInterception = method.getAnnotation(UnInterception.class); if (null != unInterception) { return true; } Object user = request.getSession().getAttribute("user"); if(user==null){ request.setAttribute("msg","你的权限不足"); request.getRequestDispatcher("/index.html").forward(request,response); return false; } return true; }
2、自定义注解
/** * 该注解用来指定某个方法不用拦截 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface UnInterception { }
3、配置类
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { //addPathPatterns拦截资源 excludePathPatterns 排除那些资源被拦截 //addInterceptor添加拦截器 registry.addInterceptor(getLoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/*"); } @Bean public LoginHandlerInterceptor getLoginHandlerInterceptor(){ return new LoginHandlerInterceptor(); } }
4、controller类
@RestController public class HelloController { @Autowired private HelloService helloService; @RequestMapping("/index")//拦截 public String index(){ return helloService.sayHellStarter("1323"); } @RequestMapping("/index") @UnInterception//不拦截 public String register(){ return "register"; } }