入門
這是支持OAuth2.0的用戶指南。對(duì)于OAuth1.0,一切都是不同的,所以看它的用戶指南。
本用戶指南分為兩個(gè)部分,第一部分是OAuth2.0提供端(OAuth 2.0 Provider),第二部分是OAuth2.0的客戶端(OAuth 2.0 Client)
OAuth2.0提供端
OAuth2.0的提供端的用途是負(fù)責(zé)將受保護(hù)的資源暴露出去。配置包括建立一個(gè)可以訪問受保護(hù)的資源的客戶端代表。提供端是通過管理和驗(yàn)證可用于訪問受保護(hù)的資源的OAuth 2令牌來做的。在適當(dāng)?shù)牡胤?,提供端也必須為用戶提供一個(gè)用于確認(rèn)客戶端 是否能夠訪問受保護(hù)的資源的接口(也就是一個(gè)頁面或是一個(gè)窗口)。 |
頂 翻譯的不錯(cuò)哦!
|
在 OAuth 2 提供者其實(shí)是分成授權(quán)服務(wù)和資源服務(wù)兩個(gè)角色的,而這兩個(gè)角色有時(shí)是存在于同一個(gè)應(yīng)用程序中的,通過 Spring Security OAuth 你可以有選擇的將它們分裂到兩個(gè)應(yīng)用程序中,也可以有選擇的給授權(quán)服務(wù)配置多個(gè)資源服務(wù)。獲取令牌(Tokens)的請(qǐng)求是由Spring MVC的控制器端點(diǎn)來處理的,訪問受保護(hù)的資源是通過標(biāo)準(zhǔn)的Spring Security請(qǐng)求過濾器來處理的。
下面列舉的端點(diǎn)是 Spring Security 過濾器鏈實(shí)現(xiàn) OAuth 2 授權(quán)服務(wù)器必須的端點(diǎn):
下面過濾器是實(shí)現(xiàn)一個(gè)OAuth2資源服務(wù)器所必須的:
對(duì)于所有的OAuth 2.0的提供端,通過使用Spring OAuth專門的@Configuration適配器來簡化配置。也可以通過XML命名空間來配置OAuth,XML的schema存在:http://www./schema/security/spring-security-oauth2.xsd。命令空間是http://www./schema/security/oauth2 |
頂 翻譯的不錯(cuò)哦!
|
授權(quán)服務(wù)器配置
配置授權(quán)服務(wù)器時(shí),您必須考慮的grant類型,從終端用戶那,客戶端會(huì)使用獲取到的訪問令牌(如授權(quán)代碼、用戶憑證、刷新令牌)。服務(wù)器的配置是用于提供一些實(shí)現(xiàn),像客戶端細(xì)節(jié)服務(wù)和令牌服務(wù)還有啟用或禁用某些方面的全球機(jī)制。但是請(qǐng)注意,每個(gè)客戶端可以專門配置權(quán)限能夠使用某些授權(quán)機(jī)制和訪問授權(quán)。即僅僅因?yàn)槟奶峁┱吲渲脼橹С帧翱蛻糇C書”grant類型,并不意味著一個(gè)特定的客戶端被授權(quán)使用grant類型。
@EnableAuthorizationServer 注釋用于配置 OAuth 2.0 授權(quán)服務(wù)器機(jī)制,加上任意一個(gè)@Beans 去實(shí)現(xiàn) AuthorizationServerConfigurer (這是一個(gè)hander適配器實(shí)現(xiàn)的空方法)。以下功能委托給由 spring 創(chuàng)造的獨(dú)立 configurers 而且傳遞到 AuthorizationServerConfigurer:
ClientDetailsServiceConfigurer:這個(gè)configurer定義了客戶端細(xì)節(jié)服務(wù)。客戶詳細(xì)信息可以被初始化,或者你可以參考現(xiàn)有的商店。
AuthorizationServerSecurityConfigurer:在令牌端點(diǎn)上定義了安全約束。
AuthorizationServerEndpointsConfigurer:定義了授權(quán)和令牌端點(diǎn)和令牌服務(wù)
|
頂 翻譯的不錯(cuò)哦!
|
提供端配置中重要的一項(xiàng)是提供給OAuth 客戶端的授權(quán)碼。 OAuth 客戶端通過將終端用戶導(dǎo)向一個(gè)可以輸入證書/口令的授權(quán)驗(yàn)證頁面來獲取授權(quán)碼,然后,將授權(quán)碼傳遞給提供端授權(quán)服務(wù)器,服務(wù)器驗(yàn)證后重定向頁面。 在 OAuth 2 說明文檔中有詳細(xì)的示例。
在 xml 配置文件中,可以使用<authorization-server/>節(jié)點(diǎn)配置 OAuth 2.0 授權(quán)服務(wù)器。 |
頂 翻譯的不錯(cuò)哦!
|
配置客戶端詳細(xì)步驟
ClientDetailsServiceConfigurer 類(AuthorizationServerConfigurer類中的一個(gè)調(diào)用類)可以用來定義一個(gè)基于內(nèi)存的或者JDBC的客戶端信息服務(wù)。
客戶端對(duì)象重要的屬性有:
clientId:(必須)客戶端id。
secret:(對(duì)于可信任的客戶端是必須的)客戶端的私密信息。
scope:客戶端的作用域。如果scope未定義或者為空(默認(rèn)值),則客戶端作用域不受限制。
authorizedGrantTypes:授權(quán)給客戶端使用的權(quán)限類型。默認(rèn)值為空。
authorities:授權(quán)給客戶端的權(quán)限(Spring普通的安全權(quán)限)。
在運(yùn)行的應(yīng)用中,可以通過直接訪問隱藏的存儲(chǔ)文件(如:JdbcClientDetailsService中用到的數(shù)據(jù)庫表)或者通過實(shí)現(xiàn)ClientDetailsManager 接口(也可以實(shí)現(xiàn)ClientDetailsService 接口,或者實(shí)現(xiàn)兩個(gè)接口)來更新客戶端信息。 |
頂 翻譯的不錯(cuò)哦!
|
管理令牌
AuthorizationServerTokenServices 接口里定義了 OAuth 2.0 令牌的操作方法。 注意以下幾點(diǎn):
創(chuàng)建AuthorizationServerTokenServices 接口的實(shí)現(xiàn)類時(shí),你可以考慮使用DefaultTokenServices 類,它使用隨機(jī)值創(chuàng)建令牌,并處理除永久令牌以外的所有令牌,對(duì)于永久令牌,它委托TokenStore類進(jìn)行處理。 令牌默認(rèn)采用基于內(nèi)存實(shí)現(xiàn)的存儲(chǔ)方式,但也有一些其它的存儲(chǔ)方式。 下面是其中一些方式的簡介:
默認(rèn)的InMemoryTokenStore 處理類對(duì)于單服務(wù)器場(chǎng)景非常適用(優(yōu)點(diǎn)有:低阻塞,宕機(jī)時(shí)無需熱切換到備份服務(wù)器)。大部分項(xiàng)目可以在開始時(shí)或者在開發(fā)模式下使用這種方式,這樣比較容易啟動(dòng)一個(gè)沒有其它依賴的服務(wù)器。
JdbcTokenStore 類是實(shí)現(xiàn)存儲(chǔ)令牌的JDBC 版本,它將令牌信息保存到關(guān)系型數(shù)據(jù)庫中。 如果服務(wù)器間共享數(shù)據(jù)庫或者同一個(gè)服務(wù)器有多個(gè)實(shí)例或者授權(quán)服務(wù)器、資源服務(wù)器有多個(gè)組件,那么可以使用JDBC方式存儲(chǔ)令牌。 使用JdbcTokenStore 類時(shí),需要將spring-jdbc組件jar包添加到工程的編譯路徑中。
JSON網(wǎng)頁令牌(JWT)可以加密所有令牌授權(quán)訪問的數(shù)據(jù)(因此不需要在后臺(tái)存儲(chǔ)數(shù)據(jù),這就是JWT一個(gè)重要的優(yōu)點(diǎn))。 缺點(diǎn)是你不能方便地撤銷一個(gè)已授權(quán)的令牌(因此一般它們被授權(quán)的有效期較短,撤銷授權(quán)的操作在刷新令牌中進(jìn)行)。 另一個(gè)缺點(diǎn)是存儲(chǔ)的令牌數(shù)據(jù)會(huì)越來越大因?yàn)樵诹钆评锩娲鎯?chǔ)了大量的用戶證書信息。 JwtTokenStore 類不是一個(gè)真正的存儲(chǔ)類,它未持久化(保存)任何數(shù)據(jù),但是它在傳輸令牌信息和授權(quán)信息(在DefaultTokenServices類中實(shí)現(xiàn))中扮演了同樣的角色。 JwtTokenStore(接口)類依賴JwtAccessTokenConverter類,授權(quán)服務(wù)器和資源服務(wù)器都需要接口的實(shí)現(xiàn)類(因此他們可以安全地使用相同的數(shù)據(jù)并進(jìn)行解碼)。 令牌以默認(rèn)方式進(jìn)行簽名,資源服務(wù)器為了能夠驗(yàn)證這些簽名,它需要有與授權(quán)服務(wù)器相同的對(duì)稱密鑰(服務(wù)器共享對(duì)稱密鑰),或者它需要有可以匹配簽名私鑰的公鑰(公有私有密鑰或混合密鑰)。 為了使用JwtTokenStore 類,你需要在工程編譯路徑下添加spring-security-jwt組件jar包(你可以在Spring OAuth的github資源庫中找到,但是兩者的版本號(hào)是不一致的)。
|
頂 翻譯的不錯(cuò)哦!
|
Grant 類型
AuthorizationEndpoint 通過 AuthorizationServerEndpointsConfigurer 可以配置支持 Grant 類型。默認(rèn)情況下支持所有的 grant 類型,除了密碼(有關(guān)詳細(xì)信息,請(qǐng)參閱下面的信息如何開啟和關(guān)閉)。以下屬性影響grant類型: · authenticationManager:密碼授予被注入一個(gè)authenticationManager開啟。 · authorizationCodeServices:為了身份驗(yàn)證代碼授予定義了授權(quán)代碼服務(wù)(org.springframework.security.oauth2.provider.code.AuthorizationCodeServices實(shí)例). · implicitGrantService:在隱式授予管理狀態(tài)。 · tokenGranter:TokenGranter(完全掌控的授予和忽略上面的其他屬性)?在XML grant類型包括authorization-server的子元素。 |
頂 翻譯的不錯(cuò)哦!
|
配置端點(diǎn)的URL
AuthorizationServerEndpointsConfigurer有一個(gè)pathMapping()方法。該方法有兩個(gè)參數(shù):
框架自己提供的URL路徑是/oauth/authorize(授權(quán)端),/oauth/token (令牌端),/oauth/confirm_access (用戶發(fā)送確認(rèn)授權(quán)到這里),還有/oauth/error (用戶呈現(xiàn)授權(quán)服務(wù)器授權(quán)出錯(cuò)的請(qǐng)求)。
注意:授權(quán)端/oauth/authorize(或者是它的影射)應(yīng)該是受Spring Security保護(hù)的,所以它只能被已授權(quán)的用戶訪問。令牌端默認(rèn)是通過使用支持使用HTTP基本身份驗(yàn)證客戶機(jī)的秘密的注解@Configuration,被Spring Oauth保護(hù)的,但不是使用XML文件的(所以在這種情況下它被保護(hù)是很明確的)。
使用XML的<authorization-server/>元素可以使用一些屬性來達(dá)到改變默認(rèn)的端點(diǎn)URL。
|
頂 翻譯的不錯(cuò)哦!
|
自定義錯(cuò)誤處理
授權(quán)服務(wù)器上錯(cuò)誤處理使用標(biāo)準(zhǔn)的 Spring MVC 功能,即 @ExceptionHandler 端點(diǎn)本身的方法。用戶還可以提供一個(gè) WebResponseExceptionTranslator 端點(diǎn)本身,最好的辦法是改變響應(yīng)的內(nèi)容而不是他們呈現(xiàn)的方式。異常的呈現(xiàn)代表 HttpMesssageConverters (這個(gè)可以添加到MVC的配置中)令牌的端點(diǎn)和OAuth的錯(cuò)誤視圖(/ OAuth /error)的授權(quán)端點(diǎn)。提供一個(gè)whitelabel錯(cuò)誤端點(diǎn),但是用戶可能需要提供一個(gè)自定義的實(shí)現(xiàn)(例如,就添加一個(gè) @Controller,它的請(qǐng)求映射是 @RequestMapping(“/ oauth /error”))。 |
頂 翻譯的不錯(cuò)哦!
|
配置資源服務(wù)器
資源服務(wù)器(可能和授權(quán)服務(wù)器或者一個(gè)單獨(dú)的應(yīng)用程序在同一臺(tái)主機(jī)上)提供被OAuth2 令牌保護(hù)的資源。 Spring OAuth提供一個(gè)Spring Security授權(quán)過濾器,它實(shí)現(xiàn)保護(hù)資源的功能。在@Configuration類中,你可以使用@EnableResourceServer來開啟/關(guān)閉過濾器,使用ResourceServerConfigurer來配置它。 下面是可配置的屬性:
@EnableResourceServer注解把一個(gè) OAuth2AuthenticationProcessingFilter 類型過濾器添加到Spring Security 過濾鏈中。
在 XML中,有一個(gè)<resource-server/>元素,它有一個(gè)id屬性 – 這是servlet過濾器的bean id,它過濾哪些可以被添加到Spring Security鏈中。 |
頂 翻譯的不錯(cuò)哦!
|
配置OAuth-Aware表達(dá)式處理器
你可能想要使用Spring Security的使用表達(dá)式語言配置訪問控制的優(yōu)點(diǎn)。 表達(dá)式處理器在 @EnableResourceServer配置中以默認(rèn)方式進(jìn)行注冊(cè)。 表達(dá)式包括#oauth2.clientHasRole,#oauth2.clientHasAnyRole, 和 #oath2.denyClient,這些可以提供基于oauth客戶端角色的訪問控制(詳細(xì)列表見OAuth2SecurityExpressionMethods)。 在XML中,你可以在<http/> 安全配置節(jié)點(diǎn)內(nèi)使用expression-handler元素注冊(cè)一個(gè)oauth-aware表達(dá)式處理器。
OAuth 2.0 客戶端
OAuth 2.0 客戶端控制著 OAuth 2.0保護(hù)的其它服務(wù)器的資源的訪問權(quán)限。 配置包括建立相關(guān)受保護(hù)資源與有權(quán)限訪問資源的用戶之間的連接。 客戶端也需要實(shí)現(xiàn)存儲(chǔ)用戶的授權(quán)代碼和訪問令牌的功能。 |
頂 翻譯的不錯(cuò)哦!
|
受保護(hù)資源的配置
受保護(hù)的資源(或稱為遠(yuǎn)程資源)可以使用OAuth2ProtectedResourceDetails類型的實(shí)體bean定義。 一個(gè)受保護(hù)的資源有以下屬性:
id:資源id。它僅在客戶端搜索資源的時(shí)候使用;在OAuth協(xié)議中它從未被用到。它也被用作bean的id。
clientId:OAuth客戶端id。OAuth提供端依賴這個(gè)id來識(shí)別客戶端。
clientSecret:與資源有關(guān)的秘密。默認(rèn)情況下,該值不為空。
accessTokenUri:提供訪問口令的OAuth提供者終端的統(tǒng)一資源標(biāo)識(shí)符(URI)。
scope:以逗號(hào)分隔的字符串列表,標(biāo)識(shí)可訪問資源的范圍。默認(rèn)情況下,該值為空。
clientAuthenticationScheme: 客戶端對(duì)訪問的令牌終端授權(quán)時(shí)使用的機(jī)制。 建議值: "http_basic" 和 "form"。 默認(rèn)值: "http_basic"。 見OAuth 2 幫助文檔2.1節(jié)。
不同的授權(quán)類型有不同的實(shí)現(xiàn)OAuth2ProtectedResourceDetails (對(duì)于client_credentials授權(quán)類型,使用ClientCredentialsResource )的方式。對(duì)于需要進(jìn)行用戶身份驗(yàn)證的授權(quán)類型,還有一個(gè)屬性:
在XML中,可以使用<resource/>元素創(chuàng)建一個(gè)OAuth2ProtectedResourceDetails類型的實(shí)體bean。 它有上面提到的所有的屬性。 |
頂 翻譯的不錯(cuò)哦!
|
使用@EnableOAuth2Client對(duì)OAuth2.0的客戶端的配置比較簡單。主要要做兩件事情:
創(chuàng)建一個(gè)過濾bean(用oauth2ClientContextFilter)來存儲(chǔ)當(dāng)前的請(qǐng)求和上下文。在這種情況下需要在請(qǐng)求期間授權(quán),來管理從重定向的位置和OAuth已認(rèn)證的url。
在請(qǐng)求作用域中創(chuàng)建一個(gè)AccessTokenRequest類型的bean。這個(gè)類型的bean可以在個(gè)人用戶的沖突中被識(shí)別碼識(shí)別(或隱式的),授權(quán)客戶端保持授權(quán)狀態(tài)。
這個(gè)過濾器需要能夠連接到應(yīng)用(例如,使用Servlet初始化程序或者web.xml配置文件配置 一個(gè)和DelegatingFilterProxy相同名稱的代理)。
|
頂 翻譯的不錯(cuò)哦!
|
在一個(gè)OAuth2RestTemplate中AccessTokenRequest可以這樣使用:
1 2 3 4 5 6 7 | @Autowired
private OAuth2ClientContext oauth2Context;
@Bean
public OAuth2RestTemplate sparklrRestTemplate() {
return new OAuth2RestTemplate(sparklr(), oauth2Context);
}
|
OAuth2ClientContext可以在Session的作用域中保持不同用戶不同的狀態(tài)。如果沒有這個(gè)功能,你需要在你自己的服務(wù)強(qiáng)上管理等效的數(shù)據(jù)結(jié)構(gòu),映射不用用戶進(jìn)來的請(qǐng)求并且用相互隔離的OAuth2ClientContext實(shí)例連接各個(gè)用戶。
在XML文件中,有一個(gè)帶有id屬性的<client/>標(biāo)簽用于表示servlet的Filter的bean id,這個(gè)必須映射成一個(gè)和DelegatingFilterProxy有相同名稱的@Configuration注解。
|
頂 翻譯的不錯(cuò)哦!
|
訪問受保護(hù)的資源
一旦,你已經(jīng)提供了所有的資源服務(wù)器配置時(shí),現(xiàn)在你可以訪問這些資源。建議的訪問這些資源是通過使用在Spring3中提到的RestTemplate。Spring Security OAuth已經(jīng)提供了一個(gè)擴(kuò)展的RestTemplate,只需要提供一個(gè)OAuth2ProtectedResourceDetails的實(shí)例。使用它與user-tokens(授權(quán)代碼授予)你應(yīng)該考慮使用@EnableOAuth2Client配置(或XML等價(jià)< oauth:rest-template / >),造成了一些請(qǐng)求和會(huì)話作用域上下文對(duì)象,要求不同的用戶在運(yùn)行時(shí)不發(fā)生沖突。
客戶端持久化訪問令牌
客戶端不需要持久化令牌,但是它可以很好的用戶不需要批準(zhǔn)一個(gè)新的令牌格蘭特每次重新啟動(dòng)客戶機(jī)應(yīng)用程序。ClientTokenServices接口定義所需的操作持續(xù)OAuth 2.0為特定用戶令牌。提供一個(gè)JDBC實(shí)現(xiàn),但是如果你喜歡的話你可以實(shí)現(xiàn)自己的服務(wù)以存儲(chǔ)的訪問令牌持久數(shù)據(jù)庫和相關(guān)的驗(yàn)證實(shí)例。如果你想使用此功能,你需要提供一個(gè)專門配置TokenProvider theOAuth2RestTemplate如
1 2 3 4 5 | @Bean @Scope (value = "session" , proxyMode = ScopedProxyMode.INTERFACES) public OAuth2RestOperations restTemplate() {
OAuth2RestTemplate template = new OAuth2RestTemplate(resource(), new DefaultOAuth2ClientContext(accessTokenRequest));
AccessTokenProviderChain provider = new AccessTokenProviderChain(Arrays.asList( new AuthorizationCodeAccessTokenProvider()));
provider.setClientTokenServices(clientTokenServices());
return template;}
|
|
頂 翻譯的不錯(cuò)哦!
|
為外部 OAuth2 提供者定制客戶端
一些外部OAuth2提供商(如Facebook)不完全實(shí)現(xiàn)正確規(guī)范,否則他們只是困在一個(gè)舊版本比Spring Security OAuth的規(guī)范。在您的客戶機(jī)應(yīng)用程序使用這些供應(yīng)商可能需要適應(yīng)客戶端基礎(chǔ)設(shè)施的各個(gè)部分。
使用Facebook作為一個(gè)例子,有一個(gè)Facebook功能tonr2應(yīng)用程序(您需要更改配置添加你自己的,有效的,客戶機(jī)id和秘密,他們很容易生成在Facebook網(wǎng)站上)。
Facebook響應(yīng)令牌也包含一個(gè)不一致的、有失效時(shí)間的JSON實(shí)體(他們使用到期而不是expires_in),所以如果你想在應(yīng)用程序中使用失效時(shí)間你將不得不使用一個(gè)自定義OAuth2SerializationService手動(dòng)解碼。
|
頂 翻譯的不錯(cuò)哦!
|
本文中的所有譯文僅用于學(xué)習(xí)和交流目的,轉(zhuǎn)載請(qǐng)務(wù)必注明文章譯者、出處、和本文鏈接
我們的翻譯工作遵照 CC 協(xié)議,如果我們的工作有侵犯到您的權(quán)益,請(qǐng)及時(shí)聯(lián)系我們
-
Knowvin 發(fā)表于 2014-09-24 11:24
這個(gè)文檔其實(shí)很簡單,具體的實(shí)現(xiàn)還是要結(jié)合使用才能知道自己到底能不能get該技能??!
-
指隙陽光 發(fā)表于 2014-10-08 08:51
其實(shí)趕腳spring的這套實(shí)現(xiàn)里面,有個(gè)loadUserXXX還有個(gè)loadClientXXX在一次請(qǐng)求里面被調(diào)用了無數(shù)次,每次都查庫,當(dāng)時(shí)看的相當(dāng)崩潰.... 沒試過開啟這套實(shí)現(xiàn)的認(rèn)證緩存之后會(huì)不會(huì)好些,當(dāng)時(shí)是自己在這兩個(gè)方法上加了下緩存....
-
王翦小寶寶 來自 iPhone 發(fā)表于 2014-10-08 08:56
引用來自“指隙陽光”的評(píng)論其實(shí)趕腳spring的這套實(shí)現(xiàn)里面,有個(gè)loadUserXXX還有個(gè)loadClientXXX在一次請(qǐng)求里面被調(diào)用了無數(shù)次,每次都查庫,當(dāng)時(shí)看的相當(dāng)崩潰.... 沒試過開啟這套實(shí)現(xiàn)的認(rèn)證緩存之后會(huì)不會(huì)好些,當(dāng)時(shí)是自己在這兩個(gè)方法上加了下緩存....點(diǎn)擊此處輸入評(píng)論
-
王翦小寶寶 來自 iPhone 發(fā)表于 2014-10-08 08:57
引用來自“指隙陽光”的評(píng)論其實(shí)趕腳spring的這套實(shí)現(xiàn)里面,有個(gè)loadUserXXX還有個(gè)loadClientXXX在一次請(qǐng)求里面被調(diào)用了無數(shù)次,每次都查庫,當(dāng)時(shí)看的相當(dāng)崩潰.... 沒試過開啟這套實(shí)現(xiàn)的認(rèn)證緩存之后會(huì)不會(huì)好些,當(dāng)時(shí)是自己在這兩個(gè)方法上加了下緩存....引用來自“王翦小寶寶”的評(píng)論點(diǎn)擊此處輸入評(píng)論 點(diǎn)擊此處輸入評(píng)論
-
開源狂人 發(fā)表于 2014-10-08 09:53
引用來自“指隙陽光”的評(píng)論其實(shí)趕腳spring的這套實(shí)現(xiàn)里面,有個(gè)loadUserXXX還有個(gè)loadClientXXX在一次請(qǐng)求里面被調(diào)用了無數(shù)次,每次都查庫,當(dāng)時(shí)看的相當(dāng)崩潰.... 沒試過開啟這套實(shí)現(xiàn)的認(rèn)證緩存之后會(huì)不會(huì)好些,當(dāng)時(shí)是自己在這兩個(gè)方法上加了下緩存....引用來自“王翦小寶寶”的評(píng)論點(diǎn)擊此處輸入評(píng)論 引用來自“王翦小寶寶”的評(píng)論點(diǎn)擊此處輸入評(píng)論 該用戶評(píng)論已被刪除
-
samfisher 發(fā)表于 2014-10-08 10:08
有學(xué)習(xí)這么復(fù)雜配置的時(shí)間,看一下 Oauth2協(xié)議,httpclient直接搞定了, spring 現(xiàn)在走上當(dāng)年J2EE的邪路了,覺得自己什么都能干,越來越復(fù)雜,與其學(xué)習(xí)這么復(fù)雜的 XML,Annotation 配置,我不如去學(xué)習(xí)一門新的語言,比如Rust, Ceylon
-
冰力 發(fā)表于 2014-10-08 10:56
臃腫的語言又作惡了。。。
-
hanzhankang 發(fā)表于 2014-10-08 11:45
自己實(shí)現(xiàn)不好嗎/?
-
loyal 發(fā)表于 2014-10-08 12:47
引用來自“samfisher”的評(píng)論有學(xué)習(xí)這么復(fù)雜配置的時(shí)間,看一下 Oauth2協(xié)議,httpclient直接搞定了, spring 現(xiàn)在走上當(dāng)年J2EE的邪路了,覺得自己什么都能干,越來越復(fù)雜,與其學(xué)習(xí)這么復(fù)雜的 XML,Annotation 配置,我不如去學(xué)習(xí)一門新的語言,比如Rust, Ceylon哈
-
凡行 發(fā)表于 2014-10-08 12:50
做好ioc和aop就好……
-
小強(qiáng)哥unas 發(fā)表于 2014-10-08 13:04
引用來自“samfisher”的評(píng)論有學(xué)習(xí)這么復(fù)雜配置的時(shí)間,看一下 Oauth2協(xié)議,httpclient直接搞定了, spring 現(xiàn)在走上當(dāng)年J2EE的邪路了,覺得自己什么都能干,越來越復(fù)雜,與其學(xué)習(xí)這么復(fù)雜的 XML,Annotation 配置,我不如去學(xué)習(xí)一門新的語言,比如Rust, Ceylon引用來自“l(fā)oyal”的評(píng)論哈 的確,我看了怎么負(fù)責(zé)的東西,覺得暈了。還是自己實(shí)現(xiàn)的好
-
雙城記 發(fā)表于 2014-10-08 16:18
一個(gè)oauth2,直接httpclient就能完事,又是factory、又是handler、又是xml,OOP玩到走火入魔了吧?
-
getchoco 發(fā)表于 2014-10-08 16:42
我用apache oltu,感覺比spring的這個(gè)簡單多了。。。
-
開源小蜜 發(fā)表于 2014-10-10 10:14
OAuth2的原理還是要好好理一理 忘光了
-
halo26812 發(fā)表于 2014-10-11 17:32
配置很復(fù)雜,shiro要簡單一點(diǎn)
|