SpringSecurity 实现方法级别的权限验证
背景 在前文SpringSecurity 使用方法中实通过SpringSecurity配置实现了请求路径得用户权限验证,但是只实现了已登录得用户有权限可以访问被保护的资源,但是不同的资源对不同用户的访问权限不一致,例如某个资源是A用户的私有资源,而B应该无权访问,或者R为A共享的资源,B可以访问但不能修改。 而且由于使用Restful风格,对统一资源的CURD操作请求路径一致,而是通过HT...
背景 在前文SpringSecurity 使用方法中实通过SpringSecurity配置实现了请求路径得用户权限验证,但是只实现了已登录得用户有权限可以访问被保护的资源,但是不同的资源对不同用户的访问权限不一致,例如某个资源是A用户的私有资源,而B应该无权访问,或者R为A共享的资源,B可以访问但不能修改。 而且由于使用Restful风格,对统一资源的CURD操作请求路径一致,而是通过HT...
将返回值统一封装时我们没有考虑当接口抛出异常的情况。当接口抛出异常时让用户直接看到服务端的异常肯定是不够友好的,而我们也不可能每一个接口都去try/catch进行处理,此时只需要使用@ExceptionHandler注解即可无感知的全局统一处理异常。 前言 实现思路 使用全局异常处理来处理校验逻辑的思路很简单,首先我们需要通过@ControllerAdvice注解定义一个全局异常的处理...
实现思路 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 具体的实现思路为设计设计一个封装类用其一个泛型成员变量对原本返回的数据进行封装,同时提供API对请求的执行状况和消息 示例代码 CommonResult 返回格式封装类 public final class CommonResult...
PCD(pointcut designators) 就是SpringAOP的切点表达式。SpringAOP的PCD是完全兼容AspectJ的,一共有10种。 SpringAOP 是基于动态代理实现的,以下以目标对象表示被代理bean,代理对象表示AOP构建出来的bean。目标方法表示被代理的方法。 execution execution是最常用的PCD。它的匹配式模板如下展示: exec...
Spring AOP 注解概述 Spring 的 AOP 功能除了在配置文件中配置一大堆的配置,比如切入点、表达式、通知等等以外,使用注解的方式更为方便快捷,特别是 Spring boot 出现以后,基本不再使用原先的 beans.xml 等配置文件了,而都推荐注解编程。 注解 功能 @Aspect ...
前言 在平时写controller时候,都需要对请求参数进行后端校验,一般写法如下: public String add(user user) { if(user.getAge() == null){ return "年龄不能为空"; } if(user.getAge() > 120){ return "年龄不能超过120"; ...
一般来讲,对于RESTful API都会有认证(Authentication)和授权(Authorization)过程,保证API的安全性。 Authentication指的是确定这个用户的身份,Authorization是确定该用户拥有什么操作权限。 认证方式一般有三种 Basic Authentication 这种方式是直接将用户名和密码放到Header中,使用Autho...
简介 Spring Security 是一个相对复杂的安全管理框架,功能比 Shiro 更加强大,权限控制细粒度更高,对 OAuth 2 的支持也更友好。 由于 Spring Security 源自 Spring 家族,因此可以和 Spring 框架无缝整合,特别是 Spring Boot 中提供的自动化配置方案,可以让 Spring Security 的使用更加便捷。 依赖配置 <...
这篇主要简单介绍 Java 集合库包含哪些常用的容器类,它们可以简单区分为: 非同步集合 同步集合 并发集合 Java 集合框架 Java 集合工具包在 Java.util 包下,它包含了常用的数据结构,比如数组、链表、栈、队列、集合、哈希表等等。 这里先放一张 Java 集合类的框架图: Collection 接口是集合类的根接口,Java 中没有提供这个接口的...
前言 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。 其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。 多线程:指的是这个程...