使用Cloud?Studio構(gòu)建SpringSecurity權(quán)限框架(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營)

1.Cloud Studio(云端 IDE)簡介
Cloud Studio 是基于瀏覽器的集成式開發(fā)環(huán)境(IDE),為開發(fā)者提供了一個(gè)永不間斷的云端工作站。用戶在使用 Cloud Studio 時(shí)無需安裝,隨時(shí)隨地打開瀏覽器就能在線編程。
Cloud Studio 作為在線 IDE,包含代碼高亮、自動(dòng)補(bǔ)全、Git 集成、終端等 IDE 的基礎(chǔ)功能,同時(shí)支持實(shí)時(shí)調(diào)試、插件擴(kuò)展等,可以幫助開發(fā)者快速完成各種應(yīng)用的開發(fā)、編譯與部署工作。
云端 IDE(Web IDE/在線 IDE/Cloud IDE)作為托管在云中的服務(wù)運(yùn)行,不再只是云端的軟件開發(fā)環(huán)境,而是提供了包括基礎(chǔ)設(shè)施服務(wù)的 Development-environment-as-a-Service 的服務(wù)模式,其天然具有如下優(yōu)勢:
- 無需在本地維護(hù)和設(shè)置項(xiàng)目;
- 更好的共享和協(xié)作;
- 直接集成/訪問云服務(wù);
- 改進(jìn)上下文切換(不同的項(xiàng)目、分支等)的方式和效率;
- 源代碼的集中控制和保密;
隨著云計(jì)算技術(shù)的成熟和普及,越來越多的傳統(tǒng)編程能力和資源以云服務(wù)的形式開放出來,從中間件、數(shù)據(jù)庫等水平能力服務(wù)組件到人臉識(shí)別、鑒權(quán)服務(wù)等基本業(yè)務(wù)服務(wù)組件都可以很容易的在云端獲取。一旦世界從基于 IaaS 的應(yīng)用開發(fā)轉(zhuǎn)變?yōu)榛?IaaS、PaaS 甚至 SaaS 的混合應(yīng)用開發(fā)模式,云端 IDE(Web IDE/在線 IDE/Cloud IDE)將成為連接開發(fā)人員、PaaS、SaaS 云服務(wù)所有服務(wù)組件的最佳選擇。
Cloud Studio提供了大量常用語言模板,無論您是前端、后端、算法、全棧開發(fā)者,在Cloud Studio都能找到符合您的那一款。

同時(shí),Cloud Studio還提供了數(shù)十種模板應(yīng)用,包括AI聊天、俄羅斯方塊、語言翻譯等。真正做到多款應(yīng)用開箱即用,Cloud Studio也提供了豐富的應(yīng)用生態(tài),開發(fā)者可以隨時(shí)提交自己的good idea。

2.應(yīng)用場景
Cloud Studio 在線編程工具適用于以下幾個(gè)場景:
2.1 快速啟動(dòng)項(xiàng)目
使用 Cloud Studio 的預(yù)置環(huán)境,您可以直接創(chuàng)建對(duì)應(yīng)類型的工作空間,快速啟動(dòng)項(xiàng)目進(jìn)入開發(fā)狀態(tài),無需進(jìn)行繁瑣的環(huán)境配置。
2.2 實(shí)時(shí)調(diào)試網(wǎng)頁
Cloud Studio 內(nèi)置預(yù)覽插件,可以實(shí)時(shí)顯示網(wǎng)頁應(yīng)用。當(dāng)您的代碼發(fā)生改變之后,預(yù)覽窗口會(huì)自動(dòng)刷新,這樣您就可以在 Cloud Studio 內(nèi)實(shí)時(shí)開發(fā)調(diào)試網(wǎng)頁了。
2.3 遠(yuǎn)程訪問云服務(wù)器
Cloud Studio 支持您連接自己的云服務(wù)器,這樣就可以在編輯器中查看云服務(wù)器上的文件,進(jìn)行在線編程和部署工作。
2.4 協(xié)助開發(fā)
在居家辦公場景下,遇到難以解決的問題可以協(xié)調(diào)其他同組人員一起刨析和解決問題。
2.5 開發(fā)流程
提供溝通、編排、排錯(cuò)、評(píng)審、測試一系列開發(fā)流程,使用者只需要關(guān)注業(yè)務(wù)開發(fā)即可。
2.6 強(qiáng)大的devops生態(tài)
配合git平臺(tái)coding+騰訊云服務(wù)器+Cloud Studio,中小企業(yè)輕松落地devops生態(tài),低成本上云、
3.SpringSecurity簡介
Spring Security是基于Spring 的身份認(rèn)證(Authentication)和用戶授權(quán)(Authorization)框架,提供了一套 Web 應(yīng)用安全性的完整解決方案。是市面上企業(yè)級(jí)安全框架的最優(yōu)選擇。
身份認(rèn)證指的是用戶去訪問系統(tǒng)資源時(shí),系統(tǒng)要求驗(yàn)證用戶的身份信息,用戶身份合法才訪問對(duì)應(yīng)資源。常見的身份認(rèn)證一般要求用戶提供用戶名和密碼。系統(tǒng)通過校驗(yàn)用戶名和密碼來完成認(rèn)證過程。
當(dāng)身份認(rèn)證通過后,去訪問系統(tǒng)的資源,系統(tǒng)會(huì)判斷用戶是否擁有訪問該資源的權(quán)限,只允許訪問有權(quán)限的系統(tǒng)資源,沒有權(quán)限的資源將無法訪問,這個(gè)過程叫用戶授權(quán)。比如 會(huì)員管理模塊有增刪改查功能,有的用戶只能進(jìn)行查詢,而有的用戶可以進(jìn)行修改、刪除。一般來說,系統(tǒng)會(huì)為不同的用戶分配不同的角色,而每個(gè)角色則對(duì)應(yīng)一系列的權(quán)限。
通俗的說,SpringSecurity提供了賬號(hào)密碼的校驗(yàn)和操作人是否有權(quán)限訪問接口的功能。
4 快速開始項(xiàng)目
這里使用Cloud Studio快速開始一個(gè)SpringSecurity項(xiàng)目。
4.1 新建命名空間
這里提供了兩種方式:
- 可以新建空的工作空間,按照博文完成項(xiàng)目構(gòu)建。
- 也可以通過coding導(dǎo)入項(xiàng)目,項(xiàng)目地址:https://e.coding.net/bcl3/spring/CloudStudioSecurity.git
代碼結(jié)構(gòu)如下:

4.2 新建實(shí)體類
這里提供通用的返回方法與項(xiàng)目實(shí)體類。
由于篇幅原因,這里不提供get/set方法,需要源代碼請(qǐng)使用coding下載。
4.2.1 Authentication
該類獲取Application.yml中提供的常量。
4.2.2 Result
用于提供統(tǒng)一返回格式。
public class Result {
private Integer code;
private String message;
private Object data;4.3 Service
UserService類查詢賬號(hào)密碼,驗(yàn)證賬號(hào)密碼是否正確,這里不連接數(shù)據(jù)庫,只提供模擬查詢驗(yàn)證,各位可再基礎(chǔ)上自行拓展。
@Component("userService")
public class UserService implements UserDetailsService {
Logger logger = LoggerFactory.getLogger(getClass());
/**
* spring提供的加密算法,該算法只能驗(yàn)證不能解密
*/
@Autowired
PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
logger.info("輸入的賬號(hào): " + username);
if(!"CloudStudio".equalsIgnoreCase(username)) {
throw new UsernameNotFoundException("用戶名或密碼錯(cuò)誤");
}
String password = passwordEncoder.encode("1234");
//模擬返回權(quán)限
return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
}4.4 SpringSecurityConfig(核心)
該類為SpringSecurity的核心類:
configure(AuthenticationManagerBuilder auth):方法用于指定驗(yàn)證賬號(hào)密碼的方法。也就是調(diào)用上文的UserService。
configure(WebSecurity web):用于放行靜態(tài)資源,靜態(tài)資源可以不用驗(yàn)證賬號(hào)。
configure(HttpSecurity http):用于配置什么接口驗(yàn)證賬號(hào),什么接口可以匿名訪問,同時(shí)可以指定自定義過濾器,這里指定了AuthenticationSuccessHandler /AuthenticationFailureHandler,用于驗(yàn)證成功/失敗的處理。同時(shí)在此處,還可以添加驗(yàn)證碼過濾器,token過濾器器等,擴(kuò)展知識(shí)可以參考博主SpringSecurity/Oauth專欄。
@Configuration
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Autowired
private AuthenticationSuccessHandler customAuthenticationSuccessHandler;
@Autowired
private AuthenticationFailureHandler customAuthenticationFailureHandler;
@Autowired
private Authentication authentication;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
/**
* 加入驗(yàn)證用戶的service
* @param auth
* @throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
/**
* 核心方法,配置什么方法可以不通過鑒權(quán)就能訪問,并指定一系列的過濾器
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// 表單登錄方式
http.formLogin()
.loginPage(authentication.getLoginPage())
// 登錄表單提交處理url, 默認(rèn)是/login
.loginProcessingUrl(authentication.getLoginProcessingUrl())
//驗(yàn)證賬號(hào)
.usernameParameter(authentication.getUsername())
//驗(yàn)證密碼
.passwordParameter(authentication.getPassword())
//指定訪問成功/失敗的處理類
.successHandler(customAuthenticationSuccessHandler)
.failureHandler(customAuthenticationFailureHandler)
.and()
.authorizeRequests()
///login/page所有人都能訪問,要不沒法登錄
.antMatchers(authentication.getLoginPage()).permitAll()
//其余接口必須驗(yàn)證用戶才能訪問
.anyRequest().authenticated()
;
}
/**
* 靜態(tài)資源不需要鑒權(quán)
* @param web
*/
@Override
public void configure(WebSecurity web){
web.ignoring().antMatchers("/dist/**", "/modules/**", "/plugins/**");
}
}4.5 CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler
當(dāng)驗(yàn)證成功和失敗,調(diào)用該類,鑒于目前開發(fā)都是前后端分離,前端需根據(jù)后端返回處理邏輯,此處配置為提供json返回,如果刪除該類,會(huì)再在頁面拋出異常而不是跳轉(zhuǎn)頁面。
@Component("customAuthenticationSuccessHandler")
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
// 認(rèn)證成功后,響應(yīng)JSON字符串
Result result = Result.ok("認(rèn)證成功");
//此處指定返回對(duì)象為json,也可以改為返回值
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(result.toJsonString());
}
}
@Component("customAuthenticationFailureHandler")
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
// 認(rèn)證失敗響應(yīng)JSON字符串,
Result result = Result.build(HttpStatus.UNAUTHORIZED.value(), exception.getMessage());
//此處指定返回對(duì)象為json,也可以改為返回值
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(result.toJsonString());
}
}4.6 application.yml
springboot配置,配置跳轉(zhuǎn)頁面等。
server:
port: 80
spring:
thymeleaf:
cache: false #關(guān)閉thymeleaf緩存
authentication:
loginPage: /login/page
loginProcessingUrl: /login/form # 登錄表單提交處理的url
username: name # 登錄表單提交的用戶名的屬性名
password: pwd # 登錄表單提交的密碼的屬性名
staticPaths: # 靜態(tài)頁面放棄攔截
- /dist/**
- /modules/**
- /plugins/**4.7 Controller
controller作為對(duì)外訪問入口,同時(shí)跳轉(zhuǎn)訪問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.8驗(yàn)證
啟動(dòng)項(xiàng)目后,訪問 localhost ,通過配置會(huì)跳轉(zhuǎn)到/login/page,此時(shí)執(zhí)行登錄即可。

當(dāng)訪問成功/失敗會(huì)跳轉(zhuǎn)頁面并拋出異常, application/json 這種返回方式適用于前后端分離,前端通過后端返回執(zhí)行邏輯。

如果刪除CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler ,就會(huì)在頁面拋出異常,而不是跳轉(zhuǎn)頁面。

5.總結(jié)
目前博主已經(jīng)體驗(yàn)了很久Cloud Studio,在使用過程中有以下的觀點(diǎn):
- Cloud Studio提供了大量的語言模板,如果您是全棧愛好者,有時(shí)候還想玩玩python,那么Cloud Studio不用您安裝各種環(huán)境,開箱及用。
- Cloud Studio 作為 Web IDE/在線 IDE/Cloud IDE,和本地 IDE 相比具有以下優(yōu)勢:無需安裝,跨平臺(tái),只要有瀏覽器就可以使用;預(yù)置常用環(huán)境,無需手動(dòng)安裝;支持創(chuàng)建網(wǎng)頁預(yù)覽,在線開發(fā)調(diào)試,節(jié)省電腦資源,Cloud Studio運(yùn)行速度不和硬件鉤掛,多年前老電腦也能流暢運(yùn)行。
- 提供求助場外觀眾功能,可以請(qǐng)到各種大神為您現(xiàn)場辦公。.
- 提供云部署套件,配合騰訊云服務(wù)+coding代碼倉庫,中小企業(yè)輕松落地devops生態(tài)。
- 持續(xù)的功能擴(kuò)展,AI編程等功能不定時(shí)迭代。
到是在使用過程博主還想提一些建議:
- Cloud Studio風(fēng)格目前與vs code很貼近,那么后端使用idea的小伙伴可能有點(diǎn)不太熟悉,未來能否提供多種風(fēng)格供使用者選擇。
- 不能配置項(xiàng)目結(jié)構(gòu),后端父子依賴工程構(gòu)建比較復(fù)雜。
先階段Cloud Studio免費(fèi)試用,Cloud Studio 團(tuán)隊(duì)基于老用戶使用體驗(yàn)角度和新用戶上手成本考慮,現(xiàn)實(shí)行每月贈(zèng)送 3000 分鐘的工作空間免費(fèi)時(shí)長 ,具體內(nèi)容可參考產(chǎn)品文檔。小伙伴們還不去體驗(yàn)一下嗎。點(diǎn)我點(diǎn)我
到此這篇關(guān)于使用Cloud Studio構(gòu)建SpringSecurity權(quán)限框架(騰訊云 Cloud Studio 實(shí)戰(zhàn)訓(xùn)練營)的文章就介紹到這了,更多相關(guān)SpringSecurity權(quán)限框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼
這篇文章主要介紹了Java線程池流程編排運(yùn)用實(shí)戰(zhàn)源碼,就在流程引擎的基礎(chǔ)上運(yùn)用?ThreadPoolExecutor,使用線程池實(shí)現(xiàn)?SpringBean?的異步執(zhí)行2022-03-03
C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法
這篇文章主要介紹了C#使用MySQLConnectorNet和MySQLDriverCS操作MySQL的方法,相比普通方法能夠在Windows下簡化很多操作步驟,需要的朋友可以參考下2016-04-04
Java基礎(chǔ)之位運(yùn)算知識(shí)總結(jié)
最近接觸到了java位運(yùn)算,之前對(duì)位運(yùn)算的了解僅僅停留在表現(xiàn)結(jié)果上,乘2除以2,對(duì)背后的原理并不了解,現(xiàn)在學(xué)習(xí)記錄一下,需要的朋友可以參考下2021-05-05

