Spring拦截器,实现

刚做Java不久,写个拦截器,以及现在用到的。

需求:登录拦截

原本是想用过滤器实现的,可是发现过滤器会把静态资源文件也过滤【因为我写的是过滤所有请求,会把登录的静态文件给过滤了,可能也能实现,但是没找到,又有点急】,因此用了拦截器实现,因为它可以排除资源请求的拦截

代码:

1:先写一个拦截器类 ,并实现接口  HandlerInterceptor

代码:

package com.jesse.config.interceptor;

import com.jesse.util.SessionUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登陆拦截器
 */
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 在请求被处理之前调用
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 检查每个到来的请求对应的session域中是否有登录标识
        if (SessionUtil.getUserId(request) == null) {
            // 未登录,重定向到登录页
            response.sendRedirect("/login.page");
            return false;
        }
        String userName = SessionUtil.getUserId(request);
        log.info("当前用户已登录,登录的用户名为:{}", userName);
        return true;
    }

    /**
     * 在请求被处理后,视图渲染之前调用
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }


    /**
     * 在整个请求结束后调用
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2:把写好的拦截器注入

代码:

package com.jesse.config.interceptor;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfiguration implements WebMvcConfigurer{
    @Bean
    public LoginInterceptor loginInterceptor(){
        return new LoginInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        //LoginInterceptor loginInterceptor = new LoginInterceptor();
        InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor());
        // 拦截路径
        loginRegistry.addPathPatterns("/**");
        // 排除路径
        loginRegistry.excludePathPatterns("/");
        loginRegistry.excludePathPatterns("/login.page");
        loginRegistry.excludePathPatterns("/checklogin.page");
        // 排除资源请求
        loginRegistry.excludePathPatterns("/assets/**");
        loginRegistry.excludePathPatterns("/css/**");
        loginRegistry.excludePathPatterns("/fonts/**");
        loginRegistry.excludePathPatterns("/image/**");
        loginRegistry.excludePathPatterns("/js/**");
        loginRegistry.excludePathPatterns("/qrcode/**");
    }
}

写的不好勿怪,纯属新手!

猜你喜欢

转载自blog.csdn.net/c_hmnzs/article/details/106251896
今日推荐