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";
}
}
5、测试