当前位置: 首页 > news >正文

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

请添加图片描述

1.Cloud Studio(云端 IDE)简介

Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能在线编程。

Cloud Studio 作为在线 IDE,包含代码高亮、自动补全、Git 集成、终端等 IDE 的基础功能,同时支持实时调试、插件扩展等,可以帮助开发者快速完成各种应用的开发、编译与部署工作。

云端 IDE(Web IDE/在线 IDE/Cloud IDE)作为托管在云中的服务运行,不再只是云端的软件开发环境,而是提供了包括基础设施服务的 Development-environment-as-a-Service 的服务模式,其天然具有如下优势:

  • 无需在本地维护和设置项目;
  • 更好的共享和协作;
  • 直接集成/访问云服务;
  • 改进上下文切换(不同的项目、分支等)的方式和效率;
  • 源代码的集中控制和保密;

随着云计算技术的成熟和普及,越来越多的传统编程能力和资源以云服务的形式开放出来,从中间件、数据库等水平能力服务组件到人脸识别、鉴权服务等基本业务服务组件都可以很容易的在云端获取。一旦世界从基于 IaaS 的应用开发转变为基于 IaaS、PaaS 甚至 SaaS 的混合应用开发模式,云端 IDE(Web IDE/在线 IDE/Cloud IDE)将成为连接开发人员、PaaS、SaaS 云服务所有服务组件的最佳选择。

Cloud Studio提供了大量常用语言模板,无论您是前端、后端、算法、全栈开发者,在Cloud Studio都能找到符合您的那一款。
在这里插入图片描述
同时,Cloud Studio还提供了数十种模板应用,包括AI聊天、俄罗斯方块、语言翻译等。真正做到多款应用开箱即用,Cloud Studio也提供了丰富的应用生态,开发者可以随时提交自己的good idea。
在这里插入图片描述

2.应用场景

Cloud Studio 在线编程工具适用于以下几个场景:

2.1 快速启动项目

使用 Cloud Studio 的预置环境,您可以直接创建对应类型的工作空间,快速启动项目进入开发状态,无需进行繁琐的环境配置。

2.2 实时调试网页

Cloud Studio 内置预览插件,可以实时显示网页应用。当您的代码发生改变之后,预览窗口会自动刷新,这样您就可以在 Cloud Studio 内实时开发调试网页了。

2.3 远程访问云服务器

Cloud Studio 支持您连接自己的云服务器,这样就可以在编辑器中查看云服务器上的文件,进行在线编程和部署工作。

2.4 协助开发

在居家办公场景下,遇到难以解决的问题可以协调其他同组人员一起刨析和解决问题。

2.5 开发流程

提供沟通、编排、排错、评审、测试一系列开发流程,使用者只需要关注业务开发即可。

2.6 强大的devops生态

配合git平台coding+腾讯云服务器+Cloud Studio,中小企业轻松落地devops生态,低成本上云、

3.SpringSecurity简介

Spring Security是基于Spring 的身份认证(Authentication)和用户授权(Authorization)框架,提供了一套 Web 应用安全性的完整解决方案。是市面上企业级安全框架的最优选择。

身份认证指的是用户去访问系统资源时,系统要求验证用户的身份信息,用户身份合法才访问对应资源。常见的身份认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

当身份认证通过后,去访问系统的资源,系统会判断用户是否拥有访问该资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问,这个过程叫用户授权。比如 会员管理模块有增删改查功能,有的用户只能进行查询,而有的用户可以进行修改、删除。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

通俗的说,SpringSecurity提供了账号密码的校验和操作人是否有权限访问接口的功能。

4 快速开始项目

这里使用Cloud Studio快速开始一个SpringSecurity项目。

4.1 新建命名空间

这里提供了两种方式:

  1. 可以新建空的工作空间,按照博文完成项目构建。
  2. 也可以通过coding导入项目,项目地址:https://e.coding.net/bcl3/spring/CloudStudioSecurity.git

代码结构如下:
在这里插入图片描述

4.2 新建实体类

这里提供通用的返回方法与项目实体类。

由于篇幅原因,这里不提供get/set方法,需要源代码请使用coding下载。

4.2.1 Authentication

该类获取Application.yml中提供的常量。

@ConfigurationProperties(prefix = "authentication")
@Component
public class Authentication {private String loginPage;private String loginProcessingUrl;private String username;private String password;private String[] staticPaths ;

4.2.2 Result

用于提供统一返回格式。

public class Result {private Integer code;private String message;private Object data;

4.3 Service

UserService类查询账号密码,验证账号密码是否正确,这里不连接数据库,只提供模拟查询验证,各位可再基础上自行拓展。

@Component("userService")
public class UserService implements UserDetailsService {Logger logger = LoggerFactory.getLogger(getClass());/*** spring提供的加密算法,该算法只能验证不能解密*/@AutowiredPasswordEncoder passwordEncoder;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {logger.info("输入的账号: " + username);if(!"CloudStudio".equalsIgnoreCase(username)) {throw new UsernameNotFoundException("用户名或密码错误");}String password = passwordEncoder.encode("1234");//模拟返回权限return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));}
}

4.4 SpringSecurityConfig(核心)

该类为SpringSecurity的核心类:

  1. configure(AuthenticationManagerBuilder auth):方法用于指定验证账号密码的方法。也就是调用上文的UserService。
  2. configure(WebSecurity web):用于放行静态资源,静态资源可以不用验证账号。
  3. configure(HttpSecurity http):用于配置什么接口验证账号,什么接口可以匿名访问,同时可以指定自定义过滤器,这里指定了AuthenticationSuccessHandler /AuthenticationFailureHandler,用于验证成功/失败的处理。同时在此处,还可以添加验证码过滤器,token过滤器器等,扩展知识可以参考博主SpringSecurity/Oauth专栏。
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {@AutowiredUserDetailsService userDetailsService;@Autowiredprivate AuthenticationSuccessHandler customAuthenticationSuccessHandler;@Autowiredprivate AuthenticationFailureHandler customAuthenticationFailureHandler;@Autowiredprivate Authentication authentication;@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}/*** 加入验证用户的service* @param auth* @throws Exception*/@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userDetailsService);}/*** 核心方法,配置什么方法可以不通过鉴权就能访问,并指定一系列的过滤器** @param http* @throws Exception*/@Overrideprotected void configure(HttpSecurity http) throws Exception {// 表单登录方式http.formLogin().loginPage(authentication.getLoginPage())// 登录表单提交处理url, 默认是/login.loginProcessingUrl(authentication.getLoginProcessingUrl())//验证账号.usernameParameter(authentication.getUsername())//验证密码.passwordParameter(authentication.getPassword())//指定访问成功/失败的处理类.successHandler(customAuthenticationSuccessHandler).failureHandler(customAuthenticationFailureHandler).and().authorizeRequests()///login/page所有人都能访问,要不没法登录.antMatchers(authentication.getLoginPage()).permitAll()//其余接口必须验证用户才能访问.anyRequest().authenticated();}/*** 静态资源不需要鉴权* @param web*/@Overridepublic void configure(WebSecurity web){web.ignoring().antMatchers("/dist/**", "/modules/**", "/plugins/**");}
}

4.5 CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler

当验证成功和失败,调用该类,鉴于目前开发都是前后端分离,前端需根据后端返回处理逻辑,此处配置为提供json返回,如果删除该类,会再在页面抛出异常而不是跳转页面。

@Component("customAuthenticationSuccessHandler")
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {@Overridepublic void onAuthenticationSuccess(HttpServletRequest request,HttpServletResponse response, Authentication authentication) throws IOException, ServletException {// 认证成功后,响应JSON字符串Result result = Result.ok("认证成功");//此处指定返回对象为json,也可以改为返回值response.setContentType("application/json;charset=UTF-8");response.getWriter().write(result.toJsonString());}
}@Component("customAuthenticationFailureHandler")
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {@Overridepublic void onAuthenticationFailure(HttpServletRequest request,HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {// 认证失败响应JSON字符串,Result result = Result.build(HttpStatus.UNAUTHORIZED.value(), exception.getMessage());//此处指定返回对象为json,也可以改为返回值response.setContentType("application/json;charset=UTF-8");response.getWriter().write(result.toJsonString());}
}

4.6 application.yml

springboot配置,配置跳转页面等。

server:port: 80
spring:thymeleaf:cache: false #关闭thymeleaf缓存
authentication:loginPage: /login/pageloginProcessingUrl: /login/form # 登录表单提交处理的urlusername: name # 登录表单提交的用户名的属性名password: pwd  # 登录表单提交的密码的属性名staticPaths: # 静态页面放弃拦截- /dist/**- /modules/**- /plugins/**

4.7 Controller

controller作为对外访问入口,同时跳转访问thymeleaf页面。

@Controller
public class CustomLoginController {/*** 访问thymeleaf页面* @return*/@RequestMapping("/login/page")public String toLogin() {return "login";}
}@Controller
public class MainController {@RequestMapping({"/index", "/", ""})public String index() {return "index";}
}

4.7 验证

启动项目后,访问localhost,通过配置会跳转到/login/page,此时执行登录即可。
在这里插入图片描述
当访问成功/失败会跳转页面并抛出异常,application/json这种返回方式适用于前后端分离,前端通过后端返回执行逻辑。
在这里插入图片描述

如果删除CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler ,就会在页面抛出异常,而不是跳转页面。
在这里插入图片描述

5.总结

目前博主已经体验了很久Cloud Studio,在使用过程中有以下的观点:

  1. Cloud Studio提供了大量的语言模板,如果您是全栈爱好者,有时候还想玩玩python,那么Cloud Studio不用您安装各种环境,开箱及用。
  2. Cloud Studio 作为 Web IDE/在线 IDE/Cloud IDE,和本地 IDE 相比具有以下优势:无需安装,跨平台,只要有浏览器就可以使用;预置常用环境,无需手动安装;支持创建网页预览,在线开发调试,节省电脑资源,Cloud Studio运行速度不和硬件钩挂,多年前老电脑也能流畅运行。
  3. 提供求助场外观众功能,可以请到各种大神为您现场办公。.
  4. 提供云部署套件,配合腾讯云服务+coding代码仓库,中小企业轻松落地devops生态。
  5. 持续的功能扩展,AI编程等功能不定时迭代。

到是在使用过程博主还想提一些建议:

  1. Cloud Studio风格目前与vs code很贴近,那么后端使用idea的小伙伴可能有点不太熟悉,未来能否提供多种风格供使用者选择。
  2. 不能配置项目结构,后端父子依赖工程构建比较复杂。

先阶段Cloud Studio免费试用,Cloud Studio 团队基于老用户使用体验角度和新用户上手成本考虑,现实行每月赠送 3000 分钟的工作空间免费时长 ,具体内容可参考产品文档。小伙伴们还不去体验一下吗。点我点我

相关文章:

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建SpringSecurity权限框架

1.Cloud Studio(云端 IDE)简介 Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能在线编程。 Clou…...

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…...

VB字符转换

都是类型转换&#xff0c;转换成数值类型 VAL是根据情况来系统自动决定转换成什么类型&#xff0c; CDbl是转换成双精度浮点数据类型 VB中C带头的强制转换函数有&#xff1a; CBool(expression) ---- 转换成布尔型 CByte(expression) ---- 转换成字节型 CCur(expression) --…...

【C++进阶之路】map与set的基本使用

文章目录 一、set系列1.set①insert②find③erase④lower_bound与upper_bound 2.multiset①count②equal_range 二、map系列1.map①insert1.插入pair的四种方式2.常用两种方式 ②[]2.multimap①count②equal_range 一、set系列 1.set ①insert 函数分析&#xff08;C98&…...

代码随想录算法训练营day56

文章目录 Day56两个字符串的删除操作题目思路代码 编辑距离题目思路代码 Day56 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 题目 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#…...

通话降噪算法在手机和IOT设备上的应用和挑战

随着电子产品的升级换代&#xff0c;用户对通话质量的要求也越来越高。通话降噪算法对通话质量起到了关键核心的作用。计算资源的提升使得深度学习模型在便携式的低功耗芯片上面跑起来了&#xff0c;器件成本降低让IoT设备开始使用骨导传感器&#xff0c;&#xff0c;那怎么样才…...

Pet Detection System (PDS)

宠物医院检验设备物联系统...

【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()

1、cv2.cvtColor() 对图像进行颜色空间的转换 cv2.cvtColor(src, code[, dst[, dstCn]])1) src: 输入图像 2) code: 颜色空间转换编码&#xff0c;常使用的GRAY和RGB之间的转换 cv2.COLOR_BGR2GRAY, cv2.COLOR_RGB2GRAY, cv2.COLOR_GRAY2BGR, cv2.COLOR_GRAY2RGB 3) dst: 输出…...

一键登录和短信验证登录,到底有什么区别?

一键登录是什么&#xff1f; 本机号码一键登录验证是一种登录认证方式&#xff0c;通过获取用户手机上的本机号码来验证用户身份&#xff0c;从而实现快捷登录和简化登录流程的目的。 在使用一键登录时&#xff0c;首先需要用户在登录页面选择使用本机号码一键登录&#xff0…...

史上最精简Android RecyclerView实现拖拽排序改变位置代码

要实现RecyclerView的长按拖动改变位置&#xff0c;可以使用ItemTouchHelper类来处理拖动和滑动的操作。下面演示如何实现长按拖动改变位置&#xff1a; 首先&#xff0c;在你的Activity或Fragment中&#xff0c;初始化RecyclerView和ItemTouchHelper&#xff1a; RecyclerVi…...

centos 7 系统上重启 mysql 时报错 Failed to restart mysqld.service: Unit not found.

在 centos 7 系统上&#xff0c;使用常规命令&#xff1a;systemctl restart mysql 或 service mysqld restart 重启 mysql 时都会报如下错误&#xff1a; Failed to start mysqld.service: Unit not found. 根据所报错误&#xff0c;在网上搜罗了一圈&#xff0c;未果&#x…...

时间复杂度空间复杂度相关练习题

1.消失的数字 【题目】&#xff1a;题目链接 思路1&#xff1a;排序——》qsort快排——》时间复杂度O&#xff08;n*log2n&#xff09; 不符合要求 思路2&#xff1a;&#xff08;0123...n)-(a[0]a[1][2]...a[n-2]) ——》 时间复杂度O&#xff08;N&#xff09;空间复杂度…...

Linux | Ubuntu18.04安装RTX 4060显卡驱动完整教程

文章目录 概述一、定义介绍二、操作教程(一)、前期准备1.进入终端界面2.关闭界面显示器3.禁用其他显卡驱动4.卸载残余显卡驱动5.下载驱动(二)、安装驱动1.给驱动程序赋予权限2.安装驱动3.检查结果(三)、后续问题1.黑屏问题概述 本节详细介绍了如何在ubuntu18系统安装4060显卡的…...

Mermaid语法使用

Mermaid语法使用 1. 基础类1.1 流程图1.2 时序图 2. 工程图2.1 类图2.2 Git图 1. 基础类 1.1 流程图 graph TBid1(圆角矩形)--普通线-->id2[矩形];subgraph 子图id2粗线>id3{菱形}id3-. 虚线.->id4>右向旗帜]id3--无箭头---id5((圆形))end方向定义 用词含义TB从…...

[OnWork.Tools]系列 05-系统工具

简介 系统工具主要是将Window常用工具的快捷启动的集合 双击快速启动 计算器,记事本,截图,画图工具 控制面板,服务管理,关闭显示器,关机 启动文件夹,我的电脑,管理工具 右键菜单 添加快捷方式到桌面...

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…...

Effective Java笔记(26)请不要使用原生态类型

首先介绍一些术语 。 声明中具有一个或者多个类型参数&#xff08; type parameter &#xff09;的类或者接口&#xff0c;就是泛型&#xff08; generic &#xff09;类或者接口 。 例如&#xff0c;List 接口就只有单个类型参数 E &#xff0c;表示列表的元素类型 。这个接口…...

linux 内存 - KO内存占用

说明 KO(kernel module)占用的内存分为两部分&#xff1a; 静态占用 &#xff1a;ko insmod时系统固定分配的内存。动态申请 &#xff1a;代码中动态申请的内存&#xff0c;由于申请方式不同&#xff0c;统计的方式也可能不同&#xff0c;例如&#xff1a;使用vmalloc和kmall…...

2023.8.7论文阅读

文章目录 CMUNeXt: An Efficient Medical Image Segmentation Network based on Large Kernel and Skip Fusion摘要本文方法实验结果 Boundary Difference Over Union Loss For Medical Image Segmentation&#xff08;损失函数&#xff09;摘要本文方法实验结果 CMUNeXt: An E…...

2023河南萌新联赛第(五)场:郑州轻工业大学 --Kruskal

题目描述 给定一张nnn个点的无向完全图&#xff0c;其中两点之间的路径边权为两点编号的按位与&#xff08;编号为 (1,2,...,n)(1,2,...,n)(1,2,...,n)&#xff09;&#xff0c;即w(u,v)u&v(1≤u,v≤n)w\left(u, v \right )u\&v \left( 1 \le u, v \le n \right)w(u,v…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...