使用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ā)者提供了一個永不間斷的云端工作站。用戶在使用 Cloud Studio 時無需安裝,隨時隨地打開瀏覽器就能在線編程。
Cloud Studio 作為在線 IDE,包含代碼高亮、自動補(bǔ)全、Git 集成、終端等 IDE 的基礎(chǔ)功能,同時支持實(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)目、分支等)的方式和效率;
- 源代碼的集中控制和保密;
隨著云計算技術(shù)的成熟和普及,越來越多的傳統(tǒng)編程能力和資源以云服務(wù)的形式開放出來,從中間件、數(shù)據(jù)庫等水平能力服務(wù)組件到人臉識別、鑒權(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都能找到符合您的那一款。
同時,Cloud Studio還提供了數(shù)十種模板應(yīng)用,包括AI聊天、俄羅斯方塊、語言翻譯等。真正做到多款應(yīng)用開箱即用,Cloud Studio也提供了豐富的應(yīng)用生態(tài),開發(fā)者可以隨時提交自己的good idea。
2.應(yīng)用場景
Cloud Studio 在線編程工具適用于以下幾個場景:
2.1 快速啟動項(xiàng)目
使用 Cloud Studio 的預(yù)置環(huán)境,您可以直接創(chuàng)建對應(yīng)類型的工作空間,快速啟動項(xiàng)目進(jìn)入開發(fā)狀態(tài),無需進(jìn)行繁瑣的環(huán)境配置。
2.2 實(shí)時調(diào)試網(wǎng)頁
Cloud Studio 內(nèi)置預(yù)覽插件,可以實(shí)時顯示網(wǎng)頁應(yīng)用。當(dāng)您的代碼發(fā)生改變之后,預(yù)覽窗口會自動刷新,這樣您就可以在 Cloud Studio 內(nèi)實(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ā)流程
提供溝通、編排、排錯、評審、測試一系列開發(fā)流程,使用者只需要關(guān)注業(yè)務(wù)開發(fā)即可。
2.6 強(qiáng)大的devops生態(tài)
配合git平臺coding+騰訊云服務(wù)器+Cloud Studio,中小企業(yè)輕松落地devops生態(tài),低成本上云、
3.SpringSecurity簡介
Spring Security是基于Spring 的身份認(rèn)證(Authentication)和用戶授權(quán)(Authorization)框架,提供了一套 Web 應(yīng)用安全性的完整解決方案。是市面上企業(yè)級安全框架的最優(yōu)選擇。
身份認(rèn)證指的是用戶去訪問系統(tǒng)資源時,系統(tǒng)要求驗(yàn)證用戶的身份信息,用戶身份合法才訪問對應(yīng)資源。常見的身份認(rèn)證一般要求用戶提供用戶名和密碼。系統(tǒng)通過校驗(yàn)用戶名和密碼來完成認(rèn)證過程。
當(dāng)身份認(rèn)證通過后,去訪問系統(tǒng)的資源,系統(tǒng)會判斷用戶是否擁有訪問該資源的權(quán)限,只允許訪問有權(quán)限的系統(tǒng)資源,沒有權(quán)限的資源將無法訪問,這個過程叫用戶授權(quán)。比如 會員管理模塊有增刪改查功能,有的用戶只能進(jìn)行查詢,而有的用戶可以進(jìn)行修改、刪除。一般來說,系統(tǒng)會為不同的用戶分配不同的角色,而每個角色則對應(yīng)一系列的權(quán)限。
通俗的說,SpringSecurity提供了賬號密碼的校驗(yàn)和操作人是否有權(quán)限訪問接口的功能。
4 快速開始項(xiàng)目
這里使用Cloud Studio快速開始一個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方法,需要源代碼請使用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類查詢賬號密碼,驗(yàn)證賬號密碼是否正確,這里不連接數(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("輸入的賬號: " + username); if(!"CloudStudio".equalsIgnoreCase(username)) { throw new UsernameNotFoundException("用戶名或密碼錯誤"); } String password = passwordEncoder.encode("1234"); //模擬返回權(quán)限 return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); } }
4.4 SpringSecurityConfig(核心)
該類為SpringSecurity的核心類:
configure(AuthenticationManagerBuilder auth):方法用于指定驗(yàn)證賬號密碼的方法。也就是調(diào)用上文的UserService。
configure(WebSecurity web):用于放行靜態(tài)資源,靜態(tài)資源可以不用驗(yàn)證賬號。
configure(HttpSecurity http):用于配置什么接口驗(yàn)證賬號,什么接口可以匿名訪問,同時可以指定自定義過濾器,這里指定了AuthenticationSuccessHandler /AuthenticationFailureHandler,用于驗(yàn)證成功/失敗的處理。同時在此處,還可以添加驗(yàn)證碼過濾器,token過濾器器等,擴(kuò)展知識可以參考博主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)證賬號 .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返回,如果刪除該類,會再在頁面拋出異常而不是跳轉(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)證成功"); //此處指定返回對象為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()); //此處指定返回對象為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作為對外訪問入口,同時跳轉(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)證
啟動項(xiàng)目后,訪問 localhost
,通過配置會跳轉(zhuǎn)到/login/page,此時執(zhí)行登錄即可。
當(dāng)訪問成功/失敗會跳轉(zhuǎn)頁面并拋出異常, application/json
這種返回方式適用于前后端分離,前端通過后端返回執(zhí)行邏輯。
如果刪除CustomAuthenticationSuccessHandler /CustomAuthenticationFailureHandler ,就會在頁面拋出異常,而不是跳轉(zhuǎn)頁面。
5.總結(jié)
目前博主已經(jīng)體驗(yàn)了很久Cloud Studio,在使用過程中有以下的觀點(diǎn):
- Cloud Studio提供了大量的語言模板,如果您是全棧愛好者,有時候還想玩玩python,那么Cloud Studio不用您安裝各種環(huán)境,開箱及用。
- Cloud Studio 作為 Web IDE/在線 IDE/Cloud IDE,和本地 IDE 相比具有以下優(yōu)勢:無需安裝,跨平臺,只要有瀏覽器就可以使用;預(yù)置常用環(huán)境,無需手動安裝;支持創(chuàng)建網(wǎng)頁預(yù)覽,在線開發(fā)調(diào)試,節(jié)省電腦資源,Cloud Studio運(yùn)行速度不和硬件鉤掛,多年前老電腦也能流暢運(yùn)行。
- 提供求助場外觀眾功能,可以請到各種大神為您現(xiàn)場辦公。.
- 提供云部署套件,配合騰訊云服務(wù)+coding代碼倉庫,中小企業(yè)輕松落地devops生態(tài)。
- 持續(xù)的功能擴(kuò)展,AI編程等功能不定時迭代。
到是在使用過程博主還想提一些建議:
- 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)隊基于老用戶使用體驗(yàn)角度和新用戶上手成本考慮,現(xiàn)實(shí)行每月贈送 3000 分鐘的工作空間免費(fèi)時長 ,具體內(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一段代碼搞懂關(guān)于Java中List、Set集合及Map的使用
這篇文章主要介紹了關(guān)于Java中List、Set集合及Map的使用及l(fā)ist,set和map三者的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08SpringBoot+Redis Bitmap實(shí)現(xiàn)活躍用戶統(tǒng)計
Redis的Bitmap數(shù)據(jù)結(jié)構(gòu)是一種緊湊的位圖,它可以用于實(shí)現(xiàn)各種場景,其中統(tǒng)計活躍用戶是一種經(jīng)典的業(yè)務(wù)場景,下面我們就來學(xué)習(xí)一下SpringBoot如何利用Redis中的Bitmap實(shí)現(xiàn)活躍用戶統(tǒng)計吧2023-11-11Springboot項(xiàng)目的服務(wù)器部署與發(fā)布方式
本文記錄了將Springboot項(xiàng)目部署到服務(wù)器并發(fā)布的過程,包括在IDEA中打包、選擇服務(wù)器、連接服務(wù)器、安裝環(huán)境、上傳jar包、配置環(huán)境變量以及運(yùn)行項(xiàng)目等步驟2025-03-03SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件
這篇文章主要介紹了SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09java中生成任意之間數(shù)的隨機(jī)數(shù)詳解
這篇文章主要介紹了java中生成任意之間數(shù)的隨機(jī)數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09SpringBoot中集成串口通信的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot中集成串口通信,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08