各位小伙伴大家好,下面这个案例介绍如何使用SpringBoot拦截器的功能实现权限拦截。
首先创建一个拦截器:AuthorInterceptor 实现 HandlerInterceptor
重写:preHandle方法。
主要的业务是从session中获得用户对象,如果用户登陆并且权限是管理员则可以继续进行,否则重定向到去登陆控制器
/**
* @author Johnny
* @category 权限拦截器
*/
@Component
public class AuthorInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("进入拦截器");
HttpSession session = request.getSession();//得到session
//从Session中取到用户对象
Object obj = session.getAttribute("current_user");
//判断用户对象是否存在
if(obj!=null) {
//判断用户对象是否是管理员
User user = (User)obj;
if(user.getName().equals("admin")) {
return true;
}
}
response.sendRedirect("tologin");
return false;
}
}
接着,配置拦截器:
创建一个类:MvcInterceptorConfig 实现:WebMvcConfigurer 接口
重写:addInterceptors
创建字符串数组,里面设置将要拦截的拦截地址。
/**
* @author Johnny
* @category 新建配置类来管理拦截器,并将之前的拦截器注入其中
*/
@Configuration
public class MvcInterceptorConfig implements WebMvcConfigurer {
@Autowired
AuthorInterceptor authorInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
String[] strs = { "/userlist*", "/deleteuser*"};
registry.addInterceptor(authorInterceptor).addPathPatterns(strs);
}
}
这里面"/userlist*", "/deleteuser*",指的是以这个userlist字符串开头控制器地址。
创建控制器
/**
* @author Johnny
* 用户控制器
*/
@Controller
public class UserController {
Logger logger = LoggerFactory.getLogger(UserController.class);
@GetMapping({"/tologin","/"})
public String toLogin(){
logger.info("跳转到登陆的页面");
return "login.jsp";
}
@PostMapping("/login")
public String login(User user, HttpSession session){
logger.info("跳转到用户登陆的页面");
logger.info(user.toString());
//将用户信息传送到session中
session.setAttribute("current_user",user);
//模拟业务逻辑查询,判断用户权限,
// 如果是管理员权限或不是管理员权限进入不同的请求地址
if(user.getName().equals("admin")) {
//跳转到用户列表页面。
return "redirect:/userlist";
}else{
return "redirect:/userinfo";
}
}
@GetMapping("/userlist")
public String userlist(){
logger.info("跳转到用户列表的页面");
return "userlist.jsp";
}
@GetMapping("/userinfo")
public String userinfo(){
logger.info("跳转到用户个人的详情页面");
return "userinfo.jsp";
}
@GetMapping("/deleteuser")
public String deleteUser(int id){
logger.info("根据用户编号,删除用户,用户的id为:"+id);
//从新定向到用户列表控制器
return "redirect:/userlist";
}
}
用户类的部分代码代码:
/**
* @author Johnny
* 用户类
*/
public class User {
private String name;
private String pass;
private String role;
}
总结:
- 创建拦截器类,实现HandlerInterceptor接口,重写必要的方法,在方法中实现拦截业务。
- 配置拦截器,创建一个类实现WebMvcConfigurer接口,完成对于拦截器的配置。
最后附上Gitee源码,提供给大家参考:
如果对你有所帮助,请:点赞、留言。