1、编写拦截器类(实现HandlerInterceptor,@Component注解)
2、注册拦截器类(@Configuration注解不能少)
拦截器类
package com.qifeng.authdemo.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Random;
/**
* @author zengqifeng
* @version 1.0
* @date 2019/12/12 17:37
* url拦截器,拦截每一个请求,做请求预处理,和鉴权
* 编写完拦截器实现,注意注册拦截器(webmvc...)
*/
@Component
public class UrlInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//根据当前用户携带的token执行鉴权先关
//鉴权是否通过返回true or false
//鉴权通过在request中预设用户信息,例如预设userId,在Controller中使用@RequestAttribute获取
request.setAttribute("userId", new Random().nextInt(10));
request.setAttribute("userName", "二哈");
request.setAttribute("password", "123");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
注册拦截器
package com.qifeng.authdemo.config;
import com.qifeng.authdemo.interceptor.UrlInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
* @author zengqifeng
* @version 1.0
* @date 2019/12/12 17:44
*/
@Configuration
public class RegistInterceptor extends WebMvcConfigurationSupport {
@Autowired
private UrlInterceptor urlInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//可设置拦截路径和非拦截路径
registry.addInterceptor(urlInterceptor).addPathPatterns("/**");
}
}
controller方法中使用@RequestAttribute注解便可获得值
package com.qifeng.authdemo.controller;
import com.qifeng.authdemo.entity.Member;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zengqifeng
* @version 1.0
* @date 2019/12/12 17:16
*/
@RestController
@RequestMapping("member")
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@GetMapping("getMemberInfo")
public Member getMemberInfo(@RequestAttribute Integer userId) {
logger.info("预设值的用户id={}", userId);
Member member = new Member();
member.setId(1);
member.setUsername("铁蛋");
member.setPassword("123456");
return member;
}
}