# springboot-security **Repository Path**: zhangchai/springboot-security ## Basic Information - **Project Name**: springboot-security - **Description**: SpringBoot集成SpringSecurity 主要实现了 认证获取token的操作和访问权限的控制 功能添加中 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot-security #### 项目介绍 SpringBoot集成SpringSecurity 主要实现了 认证获取token的操作和访问权限的控制 功能添加中 #### 软件架构 \src\main\java\com\cst\security 文件说明 authentication 权限认证的主要文件都在这里 baseUtils 主要放一些工具类和对象类 controller 受保护的资源 userPart 用户的查询服务 下面说一下授权的相关文件作用,在authentication目录下文件如下: CstResourceServerConfig.java -- 资源服务器 CstAuthorizationServerConfig.java -- 授权服务器 CstAuthenticationSuccessHandler.java -- 认证成功后进行的处理 CstAuthenticationFailureHandler.java -- 认证失败后跳转 JumpToLoginPageController.java -- 跳转到登录页 MyUserDetailsService.java -- UserDetailsService子类,为了实现数据库用户信息的查询 有关授权功能相关的三个文件夹 interceptor 下 AuthorizationSecurityInterceptor.java 自定义拦截器加入到springsecurity的拦截器链上,对需要授权才能访问的资源验证是否有相关(角色)权限 主要注意 protected InterceptorStatusToken beforeInvocation(Object object) { logger.info(" The following code validation is accessible "); Collection attributes = this.obtainSecurityMetadataSource().getAttributes(object); if (attributes != null && !attributes.isEmpty()) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); try { this.accessDecisionManager.decide(authentication, object, attributes); } catch (Exception e) { logger.info("-=没有权限=-"); throw new WithoutPermissionException("没有权限",e); } } return null; } 这段代码 中的 decide 的调用 ,它其实调用的是我们下面要说的accessDecisionManager文件夹下的AccessDecisionManagerImpl.java 这个类继承了AccessDecisionManager接口 重写了 decide 方法 改成自己的验证逻辑,我这里验证逻辑为 1、在用户认证时候到数据库查询出该用户的角色信息,放入用户认证的权限里(MyUserDetailsService类中60-69行代码) 2、在filterInvocationSecurityMetadataSource文件夹的MyInvocationSecurityMetadataSourceService.java中实现了接口FilterInvocationSecurityMetadataSource的getAttributes方法 这个方法主要就是把当前系统中所有需要授权才能访问的资源都查出来,再与这些资源需要那些授权(角色)才能访问进行绑定 3、这样拿到了该用户的所有授权(角色),又拿到了系统中所有授权资源跟访问这些资源所需要的授权,在用户访问某个资源的时候获取资源的地址,汇集到 重写过的(AccessDecisionManagerImpl.java)decide方法进行判断,决定该用户是否可访问此资源 #### 安装教程 1. 先把项目部署到本地,把数据库创建脚本(springboot-security\src\main\resources\Tables)导入数据库,修改数据库连接地址 2. 启动服务,通过postMan先认证admin用户,认证除了提交username=admin 和 password=admin 之外 还需要提交 clientId=clientId_1 和 clientSecret=clientSecret_1 3. 发送post请求后获取 access_token": "xxxxx-xxxxx-xxxx-xxxx" #### 使用说明 1. xxxx 2. xxxx 3. xxxx