@Retention(RetentionPolicy.RUNTIME)
public @interface OnlyAdmin {
}

(2)在后台对应的方法上,打上@OnlyAdmin注解
/**
* 删除博客文章
*/
@OnlyAdmin
@RequestMapping("/delete")
@ResponseBody
public Resp<String> delete(long id) {
bokeService.delete(id);
return Resp.success();
}

(3) 在登陆拦截器中拦截请求,判断当前登陆用户是否拥有该权限(下面那几个方法不用实现)。
package com.zyq.interceptor;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.zyq.annotation.OnlyAdmin;
import com.zyq.beans.User;
import com.zyq.consts.SessionKey;
import com.zyq.tools.DateTool;
/**
- 登录拦截器
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 从session中获取用户对象(该对象在用户登录的时候存于session中)
Object object = request.getSession().getAttribute(SessionKey.USER_OBJECT);
// 用户未登录,则以游客身份登录
if (object == null) {
User user = new User();
user.setId(-1L);
user.setName("游客" + DateTool.formatDateTimeSecond(new Date()));
request.getSession().setAttribute(SessionKey.USER_OBJECT, user);
}
// 请求的方法是否有注解
boolean haveAnnotataion = handler.getClass().isAssignableFrom(HandlerMethod.class);
if (haveAnnotataion) {
// 检测是否有 @OnlyAdmin 注解
OnlyAdmin oa = ((HandlerMethod)handler).getMethodAnnotation(OnlyAdmin.class);
if (oa != null) {
// 如果有 @OnlyAdmin则表明该方法只允许管理员删除
Object user = request.getSession().getAttribute(SessionKey.USER_OBJECT);
if (((User)user).getId().longValue() != 1L) { // 这里假设以ID为1为管理员
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.flush();
pw.println("{\"msg\":\"你未有该权限\"}");
return false;
}
}
}
// 用户已登录,则返回true, 放行该请求
return true;
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// TODO Auto-generated method stub
super.afterConcurrentHandlingStarted(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。






既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)

总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

962)]
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-X1E538rT-1712809733962)]
本文介绍了如何使用Springboot的拦截器和自定义注解来实现权限控制。作者分享了自己的学习和工作经验,提供了一套完整的Java开发学习资料,并强调面试准备的重要性。此外,还邀请读者加入技术交流圈子共同进步。

被折叠的 条评论
为什么被折叠?



