Spring Security构建Rest服务-1400-授权
安全分为 认证和授权,前边讲的都是认证,现在说授权。
前端业务系统的权限简单些,一般只区分是否登录,复杂点的还会区分 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-授权相关推荐
- Spring Security构建Rest服务-0702-短信验证码登录
先来看下 Spring Security密码登录大概流程,模拟这个流程,开发短信登录流程 1,密码登录请求发送给过滤器 UsernamePasswordAuthenticationFilter 2,过 ...
- Spring Security构建Rest服务-0100-前言
一.我的前言 这是看慕课网老师讲的SpringSecurity的学习笔记,老师讲的很好,开篇就说到了我的心里,老师说道: 有一定经验的程序员如何提升自己? 1,每天都很忙,但是感觉水平没有提升 2,不 ...
- Spring Security构建Rest服务-1401-权限表达式
Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...
- Spring Security构建Rest服务-0600-SpringSecurity基本原理
一.引入 只要引入了spring-boot-starter-security,所有的服务都会被保护起来.启动项目,打开时所有的controller会被保护起来,随便访问一个,如http://local ...
- 从零开始超详细的Spring Security OAuth2.0实现分布式系统授权(注册中心+网关+认证授权服务(JWT令牌验证)+资源调用服务)
文章目录 一.OAuth2.0 1.介绍 2.例子 3.执行流程 二.Spring Cloud Security OAuth2 1.环境介绍 2.认证流程 三.整合分布式项目 1.技术方案 2.项目结 ...
- 1.Spring Cloud 构建微服务应用程序之概览
1.Spring Cloud 构建微服务应用程序之概览 1.1 微服务发展史 1.2 为什么要学习微服务应用开发? 1.3 微服务和分布式之间的关系 1.4 微服务架构下构建分布式系统带来了哪些问题? ...
- Spring Security 实战干货:OAuth2授权回调的核心认证流程
1. 前言 我们在上一篇 Spring Security 实战干货:OAuth2 授权回调的处理机制 对 OAuth2 服务端调用客户端回调的流程进行了图解, 今天我们来深入了解 OAuth2 在回调 ...
- 使用Spring Security保护REST服务
总览 最近,我正在一个使用REST服务层与客户端应用程序(GWT应用程序)进行通信的项目中. 因此,我花了很多时间来弄清楚如何使用Spring Security保护REST服务. 本文介绍了我找到的解 ...
- 使用Spring Boot构建微服务(文末福利)
本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该使用微 ...
最新文章
- PL/SQL编程:用Loop-exit-when-end循环算出5的阶乘
- 数据结构---线段树
- SQLOS 简单任务调度
- overflowhidden用法思考
- 数据库——高级匹配条件
- 初学c++基础知识——第一个c++程序
- poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
- java支付宝第三方支付详解
- 关于jquery的取消阻止默认事件
- 《人人都可以创业》连载1:创业很简单,从心开始
- 【路径规划】基于matlab粒子群融合遗传算法栅格地图路径规划【含Matlab源码 526期】
- 异型烟分拣 机器人_细支烟、标准烟共线分拣可行性研究
- a ppt of CRF
- mssql2000连接oracle命令方式
- 常用App URL Scheme
- 美通社企业新闻汇总 | 2019.1.3
- JAVA类计算机专业毕业设计题目课题选题
- 移动端手机 摇一摇加声音
- python获取股票_python根据股票代码获取当前数据
- 魔兽世界怀旧服服务器显示配置,《魔兽世界怀旧服》配置要求是什么 什么配置能玩...
热门文章
- [SDOI2006] 保安站岗
- 第二节 -- python的基础语法
- ./dmitry -p ip或者域名 -f -b
- 教你学会Sql中 ROW_NUMBER的用法
- HDU 1010题解这是一道简单的DFS加回溯题,看懂后就会对递归和回溯有较深刻的理解。...
- 事件绑定、事件监听、事件委托
- 2016四季度 服务器收入和出货量双下滑
- Java开发微信的6个步骤
- Linux下通过设置PS1变量改变bash提示符颜色
- Struts2中ActionContext和ServletActionContext