package com.cc.boot.controller;
import com.cc.boot.model.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
@RequestMapping("/user")
@Controller
@Slf4j
public class UserController {
// 用户登录
@RequestMapping(value = "/login")
public @ResponseBody
Object login(HttpServletRequest request) {
User user = new User();
user.setId("1009");
user.setUserName("张飞机");
request.getSession().setAttribute("user", user);
return "登录成功";
}
//登录后,才有权限访问的接口
@RequestMapping(value = "/center")
public @ResponseBody
Object center() {
log.info("被拦截了吗-----------------------");
return "登录后可以访问center";
}
//请求不登录也可访问
@RequestMapping(value = "/out")
public @ResponseBody
Object out() {
log.info("被拦截了2222222吗-----------------------");
return "不登录也可以访问out";
}
//如果用户未登录,访问了需要登录的接口,之后跳转到改请求路径
@RequestMapping(value = "/error")
public @ResponseBody
Object error() {
return "error";
}
}
配置类
package com.cc.boot.interceptor;
import com.cc.boot.model.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取用户的消息
User user = (User) request.getSession().getAttribute("user");
if (null == user) {
//如果没有登录跳到,UserController的error接口
response.sendRedirect(request.getContextPath() + "/user/error");
return false;
}
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.cc.boot.config;
import com.cc.boot.interceptor.UserInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截user下的全部请求
String[] addPathPatterns = {
"/user/**"
// 拦截项目全部请求:/**
};
//配置需要放行的请求
String[] excludePathPatterns = {
"/user/out", "/user/error", "/user/login"
};
registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
}
}
User实体
package com.cc.boot.model;
import lombok.Data;
@Data
public class User {
private String id;
private String userName;
}