国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring之旅第十二站:Spring Security 數據存儲、攔截請求 、認證用戶、*、

YuboonaZhang / 2451人閱讀

摘要:啟用安全性這個簡單的默認配置指定了如何保護請求,以及客戶端認證用戶的方案。基于數據庫進行認證用戶數據通常會存儲在關系型數據庫中,并通過進行訪問。必須經過認證其他所有請求都是允許的,不需要認證。要求用戶不僅需要認證,還要具備權限。

Spring Security

Spring Security 是基于Spring 應用程序提供的聲明式安全保護的安全框架。Spring Sercurity 提供了完整的安全性解決方案,它能夠在Web請求級別和方法調用級別處理身份認證和授權,因為是基于Spring,所以Spring Security充分利用了依賴注入(Dependency injection DI) 和面向切面的技術。

Spring Security從兩個角度來解決安全性,他使用Servlet規范中的Filter保護Web請求并限制URL級別的訪問。Spring Security還能夠使用AOP保護方法調用——借助于對象代理和使用通知,能夠取保只有具備適當權限的用戶才能訪問安全保護的方法。

說明

如果你有幸能看到。后面的章節暫時不更新了,改變學習方式了。重要理解思想,這本書寫的太好了。記得要看作者的代碼,書上只是闡述了知識點。還有以后會把重點放在GitHub上,閱讀別人的代碼,自己理解的同時在模仿出來,分享給大家。你們的點贊就是對我的支持,謝謝大家了。

1、本文參考了《Spring 實戰》重點內容,參考了作者GitHub上的代碼,推薦使用chrome上的GitHub插件Insight.io,FireFox也有。

2、本文只為記錄作為以后參考,要想真正領悟Spring的強大,請看原書。跟著作者套路來,先別瞎搗騰!!!

3、在一次佩服老外,國外翻譯過來的書,在GiuHub上大都有實例。看書的時候,跟著敲一遍,效果很好。

4、代碼和筆記在這里GitHub,對你有幫助的話,歡迎點贊。

5、每個人的學習方式不一樣,找到合適自己的就行。2018,加油。

6、Java 8 In Action 的作者Mario Fusco

7、Spring In Action 、Spring Boot In Action的作者Craig Walls

8、知其然,也要知其所以然。有些是在Atom上手敲的,有拼寫錯誤,還請見諒。

9、Spring Web Flow 在項目中用的多嗎??感覺不錯的樣子,就不發筆記了.

談一些個人感受

1、趕快學習Spring吧,Spring MVC 、Spring Boot 、微服務。

2、重點中的重點,學習JDK 8 Lambda,Stream,Spring 5 最低要求JDK1.8.

3、還有Netty、放棄SH吧,不然你會落伍的。

4、多看一些國外翻譯過來的書,例如 Xxx In Action 系列。權威指南系列。用Kindle~

5、寫代碼之前先寫測試,這就是老外不同之處。學到了很多技巧。

6、再一次佩服老外對細節的處理。值得我們每一個人學習

1、理解Spring Security的模塊

將Spring Security模塊添加到應用程序的類路徑下。應用程序的類路徑下至少包含core和Configuration這兩個模塊。它經常被用于保護Web應用,添加Web模塊,同時還需要JSP標簽庫。

2、過濾Web請求

Spring Security借助一系列Servlet Filter來提供各種安全性功能。

DelegatingFilterProxy是一個特殊的ServletFilter,它本身所作的工作并不多,只是將工作委托給一個Javax.servlet.Filter實現類,這個實現類作為一個注冊在Spring上下文中。

web.xml配置


    springSecurityFilterChain
    org.springframework.web.filter.DelegatingFilterproxy

DelegatingFilterproxy會將過濾邏輯委托給它。

如果你希望借助于WebApplicationInitializer以JavaConfig配置,需要一個擴展類

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

/**
 * Created by guo on 2/26/2018.
 */
public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer {
}

AbstractSecurityWebApplicationInitializer實現了WebapplicationInitializer,因此Spirng會發現他,并用它在Web容器中注冊DelegatingFilterproxy.它不需要重載任何方法。它會攔截發往應用中的請求,并將其委托給springSecurityFilterChain

Spting Security依賴一系列ServletFilter來提供不同的安全特性。但是你不需要細節。當我們啟用Web安全性的時候,會自動創建這些Filter。

3、編寫簡單的安全性配置。

Spring 3.2引入了新的java配置方案,完全不需要通過XML來配置安全性功能了。

@Configuration
@EnableWebSecurity    //啟用Web安全性
public class SecurityConfig extends WebSecurityConfigurerAdapter {
}

@EnableWebSecurity啟用Web安全功能,但它本身并沒有什么用處 ,Spring Security必須配置在一個實現類WebSecurityConfigurer的bean中。

如果你的應用碰巧是在使用Spirng MVC的話,那么就應該考慮使用@EnableWebMvcSecurity還能配置一個Spring MVC參數解析器。這樣的話,處理器方法就能夠通過帶有@AuthenticationPrincipal注解的參數獲取得認證用戶的principal。它同時還配置一個bean,在使用Spring表單綁定標簽庫來定義表單時,這個bean會自動添加一個隱藏的跨站請求偽造(CSRF)token的輸入流。

@Configuration
@EnableWebMvcSecurity//啟用Web安全性
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin().and()
                .httpBasic();
    }
}

這個簡單的默認配置指定了如何保護HTTP請求,以及客戶端認證用戶的方案。通過調用 authorizeRequests()和anyRequest().authenticated()就會要求所欲進入應用的Http都要進行認證,他也配置Spring Securoty支持基于表單的登錄以及HTTP Basic方式的認證。

為了讓Spring 滿足我們應用的需求,還需要在添加一些配置。

配置用戶儲存

指定哪些請求需要認證,那些請求不需要認證,以及所需要的權限

提供一個自定義的登錄頁面,替代原來簡單的默認登錄頁。

除了Spring Security的這些功能,我們可能還希望給予安全限制,有選擇性在Web視圖上顯示特定的內容。

4 選擇查詢用戶詳細信息的服務。

我們所需要的是用戶的存儲,也就是用戶名、密碼以及其他信息存儲的地方,在進行認證決策的時候,對其進行檢索。

好消息是Spring Security非常靈活,能夠給予各種數據庫存儲來認證用戶名,它內置了多種常見的用戶存儲場景,如內存、關系型數據庫,以及LDAP,但我們也可以編寫并插入自定義的用戶存儲實現。

借助于Spring Security的Java配置,我們能夠很容易的配置一個或多個數據庫存儲方案。

5、使用基于內存的用戶存儲

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user").password("password").roles("USER").and()
                .withUser("admin").password("password").roles("USER","ADMIN");
    }

通過簡單那的調用inMemoryAuthentication就能啟用內存用戶村蘇。但是,我們還需要一些用戶,否則的話這個沒用戶并沒有且別。需要調用weithuser為其存儲添加新的用戶。以及給定用戶授予一個或多個角色權限的reles()方法

對于調式和開發人員來講,基于內存的用戶存儲是很有用的,但對于生產級別應用來講,這就不是最理想的狀態了。

5、基于數據庫進行認證

用戶數據通常會存儲在關系型數據庫中,并通過JDBC進行訪問。為了配置Spring Security使用以JDBC為支撐的用戶存儲,我們可以使用jdbcAuthentication()方法,所需的最少配置。

@Autowired
DataSource dataSource;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
            .dataSource(dataSource);
}

我們必須要配置的知識一個DataSource,這樣的話就能 訪問關系型數據庫里。

盡管默認的最少配置能夠讓一切運轉起來,但是,它對我們的數據庫模式有一些要求。它預期存在某些存儲用戶數據的表。

public static final String DEF_USERS_BY_USERNAME_QUERY =
                "select username,password,enabled " +
                "from users " +
                "where username = ?";
public static final String DEF_AUTHORITIES_BY_USERNAME_QUERY =
                "select username,authority " +
                "from authorities " +
                "where username = ?";
public static final String DEF_GROUP_AUTHORITIES_BY_USERNAME_QUERY =
                "select g.id, g.group_name, ga.authority " +
                "from groups g, group_members gm, group_authorities ga " +
                "where gm.username = ? " +
                "and g.id = ga.group_id " +
                "and g.id = gm.group_id";

在第一個查詢中,我們獲取了用戶的用戶名、密碼以及是否啟用的信息,這些信息用來進行用戶認證。接下來查詢查找 了用戶所授予的權限,用來進行鑒權。最后一個查詢中,查找了用戶作為群組的成員所授予的權限。

如果你能夠在數據庫中定義和填充滿足這些查詢的表,那么基本上就不需要你在做什么額外的事情了。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
         .dataSource(dataSource)
         .usersByUsernameQuery(
             "select username,password,true" +
             "from Spitter where username=?")
             .authoritiesByUsernameQuery(
             "select username,"ROLE_USER" from Spitter where username=?");
}

在本例中,我們只重寫了認證和基本權限的查詢語句,但是通過調用groupAuthoritiesByUsername()方法,我們也能夠將群組權限重寫為自定義的查詢語句。

為了解決密碼明文的問題,我們借助于passwordEncode()方法指定一個密碼轉碼器(encoder)

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication()
         .dataSource(dataSource)
         .usersByUsernameQuery(
             "select username,password,true" +
             "from Spitter where username=?")
             .authoritiesByUsernameQuery(
             "select username,"ROLE_USER" from Spitter where username=?")
        .passwordEncoder(new StandardPasswordEncoder("53cd3t"));
}

passwordEncoder()方法可以接受Spring Security中passwordEncoder接口的任意實現。加密模塊包含了三個這樣的實現

StandardPasswordEncoder

NoOpPasswordEncoder

BCryptPasswordEncoder

上述代碼使用了StandardPasswordEncoder,但是如果內置的實現無法滿足需求時,你可以提供自定義的實現 ,passwordEncoder接口如下:

package org.springframework.security.crypto.password;
/**
 * Service interface for encoding passwords.
 */
public interface PasswordEncoder {
    /**
     * Encode the raw password.
     */
    String encode(CharSequence rawPassword);
    /**
     * Verify the encoded password obtained from storage matches the submitted raw password after it too is encoded.
     */
    boolean matches(CharSequence rawPassword, String encodedPassword);
}

不管使用哪一個密碼轉化器,都需要理解的一點是:數據庫的秘密是永遠不會解碼的,所采取的策略與之相反。用戶在登錄時輸入的密碼會按照相同的算法進行轉碼,然后在于數據庫中已經轉碼過的密碼進行對比,這個對比是在PasswordEncoder的matches()方法中進行的。

6、基于LDAP進行認證

為了讓Spring Security使用基于LDAP的認證,我們可以使用ldapAuthentication()方法,這個方法類似于jdbcAuthentication()只不過是LDAP版本

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     auth.ldapAuthentication()
         .userSearchBase("(uid={0})")
         .groupSearchFilter("member={0}");
}

配置密碼比對
基于LDAP進行認證的默認策略是進行綁定操作,直接通過LDAP服務器認證用戶,另一種可選的方式是進行對比,涉及到輸入的 密碼發送到LDAP目錄上,并要求服務器將這個密碼和用戶的密碼進行對比,因為對比是用LDAP服務器內完成的。實際的秘密能保持私密。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     auth.ldapAuthentication()
         .groupSearchBase("on=people")
             .userSearchBase("(uid={0})")
             .groupSearchFilter("member={0}")
             .groupSearchBase("on=groups")
             .groupSearchFilter("member={0}")
             .passwordCompare();
}

如果密碼被保存在不同的屬性中,可以通過passwordAttribute()方法來聲明密碼屬性的名稱

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     auth.ldapAuthentication()
         .groupSearchBase("on=people")
         .userSearchBase("(uid={0})")
         .groupSearchFilter("member={0}")
         .groupSearchBase("on=groups")
         .groupSearchFilter("member={0}")
         .passwordCompare()
         .passwordEncoder(new Md5PasswordEncoder())
         .passwordAttribute("passcode");
}

為了避免這一點我們可以通過調用passwordEncoder()方法指定加密策略。本例中使用MD5加密,這需要LDAP服務器上密碼也是MD5進行加密

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
     auth.ldapAuthentication()
         .groupSearchBase("on=people")
         .userSearchBase("(uid={0})")
         .groupSearchFilter("member={0}")
         .groupSearchBase("on=groups")
         .groupSearchFilter("member={0}")
         .contextSource()
         .root("dc=guo,dc=com");       //.url()
         .ldif("classpath:users.ldif");     //這里是可以分開放的,需要定義users.ldif文件
}
7、攔截請求

在任何的應用中,并不是所有的頁面都需要同等程度地保護。盡管用戶基本信息頁面時公開的。但是,如果當處理“/spitter/me”時,通過展現當前用戶的基本信息那么就需要進行認證,從而確定要展現誰的信息。

對每個請求進行細粒度安全性控制的關鍵在于重載configure(HttpSecurity)方法。

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("spitters/me").authenticated()                  //進行認證。
            .antMatchers(HttpMethod.POST,"/spittles").authenticated()            //必須經過認證
            .anyRequest().permitAll();                                                                    //其他所有請求都是允許的,不需要認證。
}

antMatchers()方法中設置的路徑支持Ant風格的通配符。

.antMatchers("spitters/**").authenticated()
.antMatchers("spitters/**","spittles/mine").authenticated()
.antMatchers("spitters/.*").authenticated()
@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                        .antMatchers("spitters/me").authenticated()
                        .antMatchers(HttpMethod.POST, "/spittles")
                        .hasAuthority("ROLE_SPITTER")
                        .anyRequest().permitAll();
}

要求用戶不僅需要認證,還要具備ROLE_SPITTER權限。作為替代方案,還可以使用hasRole()方法,它會自動使用“ROLE_”前綴

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                        .antMatchers("spitters/me").authenticated()
                        .antMatchers(HttpMethod.POST,"/spittles").hasRole("SPITTER")
                        .anyRequest().permitAll();
}

很重要的一點是將最為具體的請求路徑放到最前面,而最不具體的路徑放到最后面,如果不這樣做的話,那不具體的配置路徑將會覆蓋掉更為具體的路徑配置

8、使用Spirng表達式進行安全保護

比SpEL更為強大的原因在于,HasRole()僅僅是Spring支持的安全相關表達式中的一種。

Spring Security支持的所有表達式。

principal : 用戶的principl對象

permitAll :結果始終為true

hasRole 如果用戶被授予了指定的角色 結果為true

authentication :用戶認證對象

denyAll 結果始終為false

。。。。

在掌握了Spring Security 的SpEL表達式后,我們就能夠不再局限于基于用戶的權限進訪問限制了。

9、強制通道的安全性

使用HTTP提交數據是一件具有風險的事情。通過HTTP發送的數據沒有經過加密,黑客就有機會攔截請求并且能夠看到他們想看到的信息。這就是為什么銘感的 數據要通過HTTPS來加碼發送的原因。

使用HTTPS似乎很簡單,你要做的事情只是在URL中的HTTP后加上一個字母“s”就可以了,是嗎? 是的,不加也可以的。哈哈哈。。。

這是真的,但這是把使用的HTTPS通道的責任放在了錯誤的地方。

為了保證注冊表單的數據通過HTTPS傳遞,我們可以在配置中添加requiresChannel()方法

@Override
protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("spitters/me").authenticated()
            .antMatchers(HttpMethod.POST,"/spittles").hasRole("SPITTER")
            .anyRequest().permitAll()
        .and()
            .requiresChannel()
            .antMatchers("/spitter/form").requiresSecure();   //需要HTTPS
}

不論何時,只要是對“/spitter/form”的請求,Spring Security 都視為需要安全通道(通過調用requiresChannel()確定)并自動將請求重定向到HTTPS上。

與之相反,有些頁面并不需要設置通過HTTPS傳遞。將首頁聲明為始終通過HTTP傳送。

.antMatchers("/").requiresInecure();

如果通過HTTPS發送了對"/"的請求,Spring Security將會把請求重定向到不安全的HTTP通道上。

10、防止跨站請求偽造

如果POST的請求來源于其他站點的話,跨站請求偽造(cross-site request forgery CSRF),簡單來講,如果一個站點欺騙用戶提交請求到其他服務器上的話,就會發生CSRF攻擊,這可能會帶來消極的后果。從Spring Security 3.2開始,默認就會啟用CSRF防護。實際上,除非你 采取行為處理CSRF防護或者將這個功能禁用。否則的話,在應用提交表單的時候會遇到問題。

Spring Security 通過一個同步的token的方式來實現CSRF防護的功能。它將會攔截狀態變化的請求并檢查CSRF token,如果請求中不包含 CSRF token的話,或者token不能與服務器端的token相匹配,請求將會失敗,并拋出CsrfException異常。

這意味著在你的應用中,所有的表單必須在一個"_csrf"域中提交token,而且這個token必須要與服務器端計算并存儲的token一致。這樣的話當表單提交的時候,才能匹配。

好消息是Spirng Security已經簡化了將token放到請求屬性中這一任務。如果你使用Thymeleaf作為頁面模板的話,只要

標簽的action屬性添加了Thymeleaf命名空間前綴 。那么就會自動生成一個“_csrf”隱藏域:


如果使用JSP作為模板的話


處理CSRF的另一種方式就是根本不去處理它,可以在配置中通過調用csrf()和.disable()禁用Spring Security的CSRF防護功能。

@Override
protected void configure(HttpSecurity http) throws Exception {
                .and()
                .csrf()
                .disable()
}

需要提醒的是:禁用CSRF防護功能通常來講并不是一個好主意。

10、認證用戶

formLogin方法啟用了基本的登錄頁功能

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .formLogin()    啟用默認的登錄頁
        .and()
        .authorizeRequests()
            .antMatchers("/").authenticated()
            .antMatchers("/spitter/me").authenticated()
            .antMatchers(HttpMethod.POST, "/spittles").authenticated()
            .anyRequest().permitAll();
}

添加自定義的登錄頁面


  
    Spitter
    
  
  
    

  
Register
User:
Password:

需要注意的是,在Thymeleaf模板中,包含了username和Password輸入域,就像默認的登錄頁一樣,它也提交到了相對于上下文的“/login”頁面上,因為這是一個Thymeleaf模板,因此隱藏了"_csrf"域將自動添加到表單中。

11、啟用HTTP Basic認證

對于應用程序的人類用戶來說,基于表單的認證是比較理想的,第十六章REST API 就不合適了。

HTTP Basic 認證會直接通過HTTP請求文本身,對要訪問的應用程序的用戶進行認證。當在Web瀏覽器中使用時,他將向用戶彈出一個簡單的模態對話框。

如果要啟用HTTP Basic認證的話,只需在configure()方法所傳入的HTTPSecurity對象上調用HTTPBasic()方法既可,另外還可以調用realmName()方法指定域。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .formLogin()
            .loginPage("/login")
        .and()
         .httpBasic()
             .realmName("Spittr")
        .and()

在configure中,通過調用add()方法來將不同的配置指令連接在一起。

啟用remember-me

不需要每次都認證了。

.and()
.rememberMe()
    .tokenRepository(new InMemoryTokenRepositoryImpl())
    .tokenValiditySeconds(2419200)
    .key("spittrKey")
.and()

默認情況下,這個功能通過在cookie中存儲一個token完成的,這個token最多兩周有效。但是,在這里我們指定這個token最多四周有效 (2,419,200秒)。

在登錄表單中,增加一個簡單復選框就可以完成這件事

在應用中,與登錄通用重要的就是退出,

退出功能

退出功能是通過Servlet的Filter實現的。這個Filter會攔截針對“/logout”的請求,因此,為應用添加退出功能只需要添加如下的鏈接即可。

Logout

當用戶點擊這個鏈接的時候 ,會發起對“/logout”的請求,這個請求會被Spring Security的LogouFilter所處理,用戶會退出應用,所有的Remember-me token都會被清除。在退出完成后,用戶瀏覽器將會重定向到“/login?logout”,從而允許用戶在此登錄

如果你希望用戶被重定向到其他的頁面,如應用的首頁,那么可以在configure()中進行如下的配置

@Override
protected void configure(HttpSecurity http) throws Exception {
       http
           .formLogin()
               .loginPage("/login")
       .and()
           .logout()
               .logoutSuccessUrl("/")

到目前為止,我們已經看到了如何在發起請求的時候保護Web應用。接下來,我們將會看一下如何添加視圖級別的安全性。

11、保護視圖

Spring Security 的JSP標簽庫

如果用戶通過訪問控制列表授予了指定的權限,那么渲染該標簽的內容

渲染當前用戶認證的詳細信息

如果用戶被授予了特定的權限那么渲染該標簽的內容

為了使用標簽庫首先需要聲明

<%@ taglib  prefix="security"
        url="http://www.springframework.org.security/tags"

待續,,好累,大家鼓勵下我好嗎?點贊,評論都可以。

12 小節(hahaha)

對于許多應用而言,安全性都是非常重要的切面。Spirng Security 提供了一種簡單、靈活且強大的機制來保護我們的應用程序。

借助于一系列Servlet Filte,Spring Security 能夠控制對Web資源的訪問,包括Spring MVC控制器,借助于Spring Security的Java配置模型,我們不必直接處理Filter,能夠非常簡潔地聲明為Web安全性功能。

當認證用戶時,Spring Security提供了多種選項,我們探討了如何基于內存用戶庫,關系型數據庫和LDAP目錄服務器來配置認證功能。如果這些可選方案無法滿足你的需求的話,我們還學習力如何創建和配置自定義的用戶服務。

在前面的幾章中,我們看到了如何將Spring運用到應用程序的前端,在接下來的章中,我們還會繼續深入這個技術棧,學習Spring如何在后端發揮作用,下一章將會首先從Spring的JDBC抽象開始。

期待》》》》。。。。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68593.html

相關文章

  • Spring之旅二站:bean、新特性。。。

    摘要:除了,還簡單介紹了對的支持,可以幫助應用將散落在各處的邏輯匯集于一處切面。當裝配的時候,這些切面能夠運行期編織起來,這樣就能呢個非常有效的賦予新功能。 第1章 Spring之旅 說明 1、本文參考了《Spring 實戰》重點內容,參考了GitHub上的代碼 2、每個人的學習方式不一樣,但目的是一樣的,活學活用。最近一直在聽《我們不一樣》 3、本文只為記錄作為以后參考,要想真正領悟Sp...

    luodongseu 評論0 收藏0
  • Spring Security

    摘要:框架具有輕便,開源的優點,所以本譯見構建用戶管理微服務五使用令牌和來實現身份驗證往期譯見系列文章在賬號分享中持續連載,敬請查看在往期譯見系列的文章中,我們已經建立了業務邏輯數據訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評論0 收藏0
  • 使用JWT保護你的Spring Boot應用 - Spring Security實戰

    摘要:創建應用有很多方法去創建項目,官方也推薦用在線項目創建工具可以方便選擇你要用的組件,命令行工具當然也可以。對于開發人員最大的好處在于可以對應用進行自動配置。 使用JWT保護你的Spring Boot應用 - Spring Security實戰 作者 freewolf 原創文章轉載請標明出處 關鍵詞 Spring Boot、OAuth 2.0、JWT、Spring Security、SS...

    wemall 評論0 收藏0
  • [直播視頻] 《Java 微服務實踐 - Spring Boot 系列》限時折扣

    摘要:作為微服務的基礎設施之一,背靠強大的生態社區,支撐技術體系。微服務實踐為系列講座,專題直播節,時長高達小時,包括目前最流行技術,深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業人員拋磚引玉。 簡介 目前業界最流行的微服務架構正在或者已被各種規模的互聯網公司廣泛接受和認可,業已成為互聯網開發人員必備技術。無論是互聯網、云計算還是大數據,Java平臺已成為全棧的生態體系,...

    Enlightenment 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<