通过拦截器实现权限管理

文章介绍了通过拦截器实现权限管理的步骤,包括为不同用户分配角色和权限、创建自定义注解标记接口权限、编写拦截器检查用户权限,以及注册拦截器以过滤请求。主要涉及的角色-权限模型、注解机制和基于Redis的权限存储。
摘要由CSDN通过智能技术生成

通过拦截器实现权限管理

1.对不同的用户分配不同的角色

​ 用户——角色——权限

在数据库中将所有的权限分配合适

2.写一个注解,用来标记是否有对应的权限
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Permission{
    String value();
}

将这个注解写在需要区分权限的接口上

   private static final Logger log = LoggerFactory.getLogger(LoginInterceptor.class);

    @Autowired
    private UserService userService;

    /**
     * 按照条件查询用户.
     */
    @GetMapping("/list")
    @Permission("system:user:query")
    @Log(title = "查看用户列表")
    public Result<PageInfo<SysUserVo>> getUser(@RequestParam(name = "page", defaultValue = "1") Integer page,
                                               @RequestParam(name = "limit", defaultValue = "10") Integer limit,
                                               String username, String phonenumber, String status,
                                               @RequestParam(name = "begin", required = false) String begin,
                                               @RequestParam(name = "end", required = false) String end) {
        log.info("---------------------------list用户列表--------------");
        return Result.ok(userService.getUserList(page, limit, username, phonenumber, status, begin, end));
    }
3.写一个拦截器,在发送请求的时候看用户有没有权限
@Component
public class MenuInterceptor implements HandlerInterceptor {

    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 判断权限管理的过滤器
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        Annotation annotation = method.getAnnotation(Permission.class);
        if (annotation != null) {
            Set<String> permissions = (Set<String>) redisTemplate.opsForValue().get("permission");
            Permission permissionAnnotation = (Permission) annotation;
            String value = permissionAnnotation.value();
            if (permissions.contains(value)) {
                return true;
            }
            throw new CustomException("未授权访问");
        }
        return true;
    }
}
4.注册拦截器
@Configuration
public class ApplicationConfig extends WebMvcConfigurationSupport {

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Autowired
    private MenuInterceptor menuInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //拦截所有请求,除了登录页面和登录接口
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/", "/login");
        registry.addInterceptor(menuInterceptor).addPathPatterns("/**").excludePathPatterns("/", "/login");
    }
}

这样就用拦截器实现了权限控制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值