springmvc,springboot拦截器的配置

springmvc,springboot拦截器的配置

springmvc拦截器的配置
首先继承HandlerInterceptorAdapter ,重写preHandle方法.preHandle在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制等处理,实现对是否登录进行拦截。

  • preHandle 方法:该方法在控制器的处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回false 表示中断后续操作。

  • postHandle
    方法:该方法在控制器的处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步的修改。

  • afterCompletion
    方法:该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志信息等工作。

public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {
        // 1.获取session对象
        HttpSession session = request.getSession();
        // 2.尝试从session获取admin对象
        Admin admin = (Admin)session.getAttribute(CrowdConstant.ATTR_NAME_LOGIN_ADMIN);
        // 3.判断admin对象是否存在
        if (admin == null) {
            throw new AccessForbiddenException(CrowdConstant.MESSAGE_ACCESS_FORBIDEN);
        }
        // 4.不为空放行
        return true;
    }
}

在springmvc的配置文件里进行拦截器的注册。
需要值得注意的是:<mvc:interceptor> 元素的子元素必须按照 <mvc:mapping…/>、<mvc:exclude-mapping…/>、<bean…/> 的顺序配置。

<!-- 注册拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- mvc:mapping配置要拦截的资源 -->
			<!-- /*对应一层路径,比如:/aaa -->
			<!-- /**对应多层路径,比如:/aaa/bbb或/aaa/bbb/ccc或/aaa/bbb/ccc/ddd -->
			<mvc:mapping path="/**"/>
						
			<!-- mvc:exclude-mapping配置不拦截的资源访问的路径 -->
			<mvc:exclude-mapping path="/admin/to/login/page.html"/>
			<mvc:exclude-mapping path="/admin/do/login.html"/>
			<mvc:exclude-mapping path="/admin/do/logout.html"/>
			
			<!-- 配置拦截器类 -->
			<bean class="com.atguigu.crowd.mvc.interceptor.LoginInterceptor"/>
		</mvc:interceptor>
	</mvc:interceptors>

在springboot中配置验证是否登录拦截器
首先写一个拦截器类实现HandlerInterceptor 接口

public class UserLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        User user = (User)request.getSession().getAttribute(MallConst.CURRENT_USER);
        if (user == null){
            throw new UserLoginExceprion();
        }
        return true;
    }
}

再写一个配置类(@Configuration)实现WebMvcConfigurer 接口

@Configuration
public class InterceptionConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {		// 注册拦截器
        registry.addInterceptor(new UserLoginInterceptor())
                .addPathPatterns("/**")		// 需要拦截的资源
                .excludePathPatterns("/user/login",		// 不拦截的资源
                 "/user/register",  "/category/selectAll",
                 "/products", "/products/*");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值