安全分为 认证和授权,前边讲的都是认证,现在说授权。

前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 VIP用户等简单的角色,权限规则基本不变。

后台系统比较复杂,角色众多,权限随着业务不断变化。

1,用代码控制简单的权限

直接在配置类 BrowserSecurityConfig   extends   WebSecurityConfigurerAdapter 的configure方法里

http //--------------授权相关的配置 ---------------------
            .authorizeRequests()  // /authentication/require:处理登录,securityProperties.getBrowser().getLoginPage():用户配置的登录页
                .antMatchers(SecurityConstants.DEFAULT_UNAUTHENTICATION_URL, securityProperties.getBrowser().getLoginPage(),//放过登录页不过滤,否则报错
                SecurityConstants.DEFAULT_LOGIN_PROCESSING_URL_MOBILE,SecurityConstants.SESSION_INVALID_PAGE,SecurityConstants.DEFAULT_VALIDATE_CODE_URL_PREFIX+"/*")//验证码.permitAll() //-------上边的不用授权也允许访问------//~=========简单的权限控制,只区分是否登录的情况可以配置在这里=======//  /user 的post请求需要ADMIN权限  .antMatchers("/user/*").hasRole("ADMIN").anyRequest()        //任何请求.authenticated()    //都需要身份认证

一行红色部分配置就可以了,意思是 /user/* 的所有请求需要有ADMIN 权限,如果是Rest风格的服务,只需要配置成 antMatchers(HttpMethod.POST,"/user/*").hasRole("ADMIN") 格式即可。

这个权限在UserDetailsService 的loadUserByUsername方法返回的user的权限集合里定义。格式是ROLE_ADMIN( ROLE_权限名称,ADMIN和匹配器里一致)(这个格式具体在ExpressionUrlAuthorizationConfigurer里)

private SocialUserDetails buildUser(String userId) {String password = passwordEncoder.encode("123456");System.err.println("加密后密码:  "+password);//参数:用户名|密码|是否启用|账户是否过期|密码是否过期|账户是否锁定|权限集合return new SocialUser(userId,password,true,true,true,true,//工具类 将字符串转换为权限集合,ROLE_角色 是spring要求的权限格式 AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN"));}

再说一个过滤器,AnonymousAuthenticationFilter,这个过滤器就是判断前边的过滤器是否认证成功,如果没有认证成功,就创建一个默认的用户创建一个Authentication 做登录。具体代码看其源码。

SpringSecurity 授权相关类

==============================================================================================================================

控制复杂权限:基于rbac

自定义查询权限的类根据用户名查询用户的权限

package com.imooc.security.rbac;import java.util.HashSet;
import java.util.Set;import javax.servlet.http.HttpServletRequest;import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;@Component("rbacService")
public class RbacServiceImpl implements RbacService {private AntPathMatcher antPathMatcher = new AntPathMatcher();@Overridepublic boolean hasPermission(HttpServletRequest request, Authentication authentication) {Object principal = authentication.getPrincipal();boolean hasPermission = false;if(principal instanceof UserDetails){String username = ((UserDetails)principal).getUsername();//读取用户所有权限的url,需要查询数据库Set<String> urls = new HashSet<>();urls.add("/user/*");for(String url : urls){if(antPathMatcher.match(url, request.getRequestURI())){hasPermission = true ;break ;}}}return hasPermission;}}

配置,注意,授权的配置要配置在免登录就能访问的服务器的最后

github:https://github.com/lhy1234/spring-security

转载于:https://www.cnblogs.com/lihaoyang/p/8607595.html

Spring Security构建Rest服务-1400-授权相关推荐

  1. Spring Security构建Rest服务-0702-短信验证码登录

    先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过 ...

  2. Spring Security构建Rest服务-0100-前言

    一.我的前言 这是看慕课网老师讲的SpringSecurity的学习笔记,老师讲的很好,开篇就说到了我的心里,老师说道: 有一定经验的程序员如何提升自己? 1,每天都很忙,但是感觉水平没有提升 2,不 ...

  3. Spring Security构建Rest服务-1401-权限表达式

    Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...

  4. Spring Security构建Rest服务-0600-SpringSecurity基本原理

    一.引入 只要引入了spring-boot-starter-security,所有的服务都会被保护起来.启动项目,打开时所有的controller会被保护起来,随便访问一个,如http://local ...

  5. 从零开始超详细的Spring Security OAuth2.0实现分布式系统授权(注册中心+网关+认证授权服务(JWT令牌验证)+资源调用服务)

    文章目录 一.OAuth2.0 1.介绍 2.例子 3.执行流程 二.Spring Cloud Security OAuth2 1.环境介绍 2.认证流程 三.整合分布式项目 1.技术方案 2.项目结 ...

  6. 1.Spring Cloud 构建微服务应用程序之概览

    1.Spring Cloud 构建微服务应用程序之概览 1.1 微服务发展史 1.2 为什么要学习微服务应用开发? 1.3 微服务和分布式之间的关系 1.4 微服务架构下构建分布式系统带来了哪些问题? ...

  7. Spring Security 实战干货:OAuth2授权回调的核心认证流程

    1. 前言 我们在上一篇 Spring Security 实战干货:OAuth2 授权回调的处理机制 对 OAuth2 服务端调用客户端回调的流程进行了图解, 今天我们来深入了解 OAuth2 在回调 ...

  8. 使用Spring Security保护REST服务

    总览 最近,我正在一个使用REST服务层与客户端应用程序(GWT应用程序)进行通信的项目中. 因此,我花了很多时间来弄清楚如何使用Spring Security保护REST服务. 本文介绍了我找到的解 ...

  9. 使用Spring Boot构建微服务(文末福利)

    本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该使用微 ...

最新文章

  1. PL/SQL编程:用Loop-exit-when-end循环算出5的阶乘
  2. 数据结构---线段树
  3. SQLOS 简单任务调度
  4. overflowhidden用法思考
  5. 数据库——高级匹配条件
  6. 初学c++基础知识——第一个c++程序
  7. poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
  8. java支付宝第三方支付详解
  9. 关于jquery的取消阻止默认事件
  10. 《人人都可以创业》连载1:创业很简单,从心开始
  11. 【路径规划】基于matlab粒子群融合遗传算法栅格地图路径规划【含Matlab源码 526期】
  12. 异型烟分拣 机器人_细支烟、标准烟共线分拣可行性研究
  13. a ppt of CRF
  14. mssql2000连接oracle命令方式
  15. 常用App URL Scheme
  16. 美通社企业新闻汇总 | 2019.1.3
  17. JAVA类计算机专业毕业设计题目课题选题
  18. 移动端手机 摇一摇加声音
  19. python获取股票_python根据股票代码获取当前数据
  20. 魔兽世界怀旧服服务器显示配置,《魔兽世界怀旧服》配置要求是什么 什么配置能玩...

热门文章

  1. [SDOI2006] 保安站岗
  2. 第二节 -- python的基础语法
  3. ./dmitry -p ip或者域名 -f -b
  4. 教你学会Sql中 ROW_NUMBER的用法
  5. HDU 1010题解这是一道简单的DFS加回溯题,看懂后就会对递归和回溯有较深刻的理解。...
  6. 事件绑定、事件监听、事件委托
  7. 2016四季度 服务器收入和出货量双下滑
  8. Java开发微信的6个步骤
  9. Linux下通过设置PS1变量改变bash提示符颜色
  10. Struts2中ActionContext和ServletActionContext