首页 > 编程语言 >Java自定义注解实现权限管理

Java自定义注解实现权限管理

时间:2022-10-10 21:07:20浏览次数:77  
标签:httpServletRequest map Java 自定义 httpServletResponse Authority return 注解 public


前言

Github地址:​​​https://github.com/erlieStar/authority_example​

源码

定义权限注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Authority {

String value() default "admin";
}

增加拦截器

public class AuthorityInterceptor implements HandlerInterceptor

@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception {

HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
Authority authority = method.getAnnotation(Authority.class);
if (authority == null) {
// 如果注解为null, 说明不需要拦截, 直接放过
return true;
}
// 这里为了方便直接传递了参数
// 一般的做法是用户第一次登录,将信息放到session中
// 以后每次操作时从request中获取session,从session中获取用户信息
// 然后根据用户信息从数据库中查权限信息
String userAuthority = httpServletRequest.getParameter("userAuthority");
if (!userAuthority.equals("admin")) {
// 脱离了Spring MVC的返回流程,重新编码
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("application/json;charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.print("没有权限");
out.flush();
out.close();
return false;
}
return true;
}

@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}

@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws

配置拦截器

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthorityInterceptor()).addPathPatterns("/**");
}
}

测试Controller

@RestController
public class UserController {

// 这个是为了测试没有注解时,是否会拦截
@RequestMapping(value = "login", method = RequestMethod.GET)
public Map login() {
Map<String, String> map = new HashMap<>();
map.put("msg", "login success");
return map;
}

@Authority()
@RequestMapping(value = "queryAllProduct", method = RequestMethod.GET)
public Map queryAllProduct() {
Map<String, String> map = new HashMap<>();
map.put("msg", "this is all data");
return map;
}
}

测试

Java自定义注解实现权限管理_拦截器

Java自定义注解实现权限管理_github_02

Java自定义注解实现权限管理_github_03


标签:httpServletRequest,map,Java,自定义,httpServletResponse,Authority,return,注解,public
From: https://blog.51cto.com/u_15651175/5745252

相关文章

  • spring day02 xml开发总结以及注解开发总结
    第三方资源配置管理管理DataSource连接池对象【第一步】添加Druid连接池依赖<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><......
  • C++和Java多维数组声明和初始化时的区别与常见问题
    //C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数。而仅声明/创建数组而不初始化时,Cpp要求必须写明//......
  • 【JavaSE】数组
    定义的通用公式:变量类型变量名字=变量的值数组定义:int[](指明变量类型为数组)nums(变量名)=newint[10](变量的值,一个大小为10的数组对象)声明数组的时候,数组的......
  • java中列表 Not showing null elements 列表中去除null 使用 list.removeAll(Collec
    java中列表Notshowingnullelements列表中去除nullNotshowingnullelements有时候看见list的size与结果不一致,例如下面这样导致原因:list集合允许null值,......
  • java spring 纯注解开发
     创建核心容器有两个方法如下图     获取Bean对象方法有三种     BeanFactory与FactoryBean区别    spring纯注解由哪些常见的 ......
  • 【JavaSE】方法
    Java是值传递方法的重载规则:.方法名必须相同.参数列表必须不同.返回类型可以相同也可以不同.仅仅返回类型不同不能构成重载方法的可变参数:publicstaticvoid......
  • (免费教程)Java实现快递单号查询API接口通用方法
    前期准备安装一个免费打印插件:​​http://www.kdniao.com/reg?utm_source=BKY&utm_medium=XMT&utm_campaign=daKkuaidi&utm_content=DZMDAPI&utm_term=A1​​1.  判断你......
  • Java基础语法 DoWhile循环
    DoWhilepackageBasicGrammar.day05;/*do-while循环的使用一、循环结构的4个要素①初始化条件②循环条件--->是boolean类型③循环体④迭代条件二、do-whi......
  • Java中的错误处理
    Java中的错误处理面向对象的错误处理机制错误被抽象成类(异常类)错误的具体信息、发生错误的上下文状态被封装在异常类的实例中如何使用异常1.在方法体中创建异常类的实......
  • Visual Studio中根据已有代码片段,添加自定义的
    举例:在VS中创建自定义代码片段(snippet),例如for+两次tab键,属性prop+两次tab键等。以propfull为例,步骤如下:1,查看VS中代码片段位置2,snippet文件地址3,复制出来prop......