中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SpringSecurity認(rèn)證提供程序示例詳解

1.簡介

創(chuàng)新互聯(lián)不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對營銷、技術(shù)、服務(wù)都有自己獨(dú)特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的網(wǎng)站建設(shè)、做網(wǎng)站質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時,也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級,滿足企業(yè)一站式成都全網(wǎng)營銷推廣需求,讓再小的品牌網(wǎng)站設(shè)計也能產(chǎn)生價值!

本教程將介紹如何在Spring Security中設(shè)置身份驗(yàn)證提供程序,與使用簡單UserDetailsService的標(biāo)準(zhǔn)方案相比,提供了額外的靈活性。

2. The Authentication Provider

Spring Security提供了多種執(zhí)行身份驗(yàn)證的選項(xiàng) - 所有這些都遵循簡單的規(guī)范 - 身份驗(yàn)證請求由Authentication Provider處理,并且返回具有完整憑據(jù)的完全身份驗(yàn)證的對象。

標(biāo)準(zhǔn)和最常見的實(shí)現(xiàn)是DaoAuthenticationProvider - 它從一個簡單的只讀用戶DAO檢索用戶詳細(xì)信息 - UserDetailsService。此UserDetailsService只能訪問用戶名,用來檢索完整的用戶實(shí)體 - 在很多情況下,這就足夠了。

更多常見的場景仍然需要訪問完整的身份驗(yàn)證請求才能執(zhí)行身份驗(yàn)證過程。例如,在針對某些外部第三方服務(wù)(例如Crowd)進(jìn)行身份驗(yàn)證時,將需要來自身份驗(yàn)證請求的用戶名和密碼。

對于這些更高級的方案,我們需要定義自定義身份驗(yàn)證提供程序:

@Component
public class CustomAuthenticationProvider
 implements AuthenticationProvider {
 
 @Override
 public Authentication authenticate(Authentication authentication) 
  throws AuthenticationException {
 
  String name = authentication.getName();
  String password = authentication.getCredentials().toString();
   
  if (shouldAuthenticateAgainstThirdPartySystem()) {
 
   // use the credentials
   // and authenticate against the third-party system
   return new UsernamePasswordAuthenticationToken(
    name, password, new ArrayList<>());
  } else {
   return null;
  }
 }
 
 @Override
 public boolean supports(Class<?> authentication) {
  return authentication.equals(
   UsernamePasswordAuthenticationToken.class);
 }
}

請注意,在返回的Authentication對象上設(shè)置的授予權(quán)限是空的 - 這是因?yàn)闄?quán)限當(dāng)然是特定于應(yīng)用程序的。

3.注冊Authentication Provider

既然定義了身份驗(yàn)證提供程序,我們需要使用可用的命名空間支持在XML安全配置中指定它:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
 xmlns="http://www.springframework.org/schema/security"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:beans="http://www.springframework.org/schema/beans"
 xsi:schemaLocation="
 http://www.springframework.org/schema/security 
 http://www.springframework.org/schema/security/spring-security-4.0.xsd
 http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
 
 <http use-expressions="true">
  <intercept-url pattern="/**" access="isAuthenticated()"/>
  <http-basic/>
 </http>
 
 <authentication-manager>
  <authentication-provider
   ref="customAuthenticationProvider" />
 </authentication-manager>
 
</beans:beans>

4. Java Configuration

接下來,我們來看看相應(yīng)的Java配置:

@Configuration
@EnableWebSecurity
@ComponentScan("org.baeldung.security")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
 @Autowired
 private CustomAuthenticationProvider authProvider;
 
 @Override
 protected void configure(
  AuthenticationManagerBuilder auth) throws Exception {
 
  auth.authenticationProvider(authProvider);
 }
 
 @Override
 protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests().anyRequest().authenticated()
   .and()
   .httpBasic();
 }
}

5. 測試認(rèn)證

無論是否在后端使用此自定義身份驗(yàn)證提供程序,從客戶端請求身份驗(yàn)證基本相同 - 我們可以使用簡單的curl命令發(fā)送經(jīng)過身份驗(yàn)證的請求:

curl --header "Accept:application/json" -i --user user1:user1Pass 
 http://localhost:8080/spring-security-custom/api/foo/1

請注意 - 出于本示例的目的 - 我們已使用基本身份驗(yàn)證保護(hù)REST API。

我們從服務(wù)器返回預(yù)期的200 OK

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=B8F0EFA81B78DE968088EBB9AFD85A60; Path=/spring-security-custom/; HttpOnly
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 02 Jun 2013 17:50:40 GMT

六,總結(jié)

在本文中,我們討論了Spring Security的自定義身份驗(yàn)證提供程序的示例。

可以在GitHub項(xiàng)目中找到本教程的完整實(shí)現(xiàn) - 這是一個基于Maven的項(xiàng)目,因此它應(yīng)該很容易導(dǎo)入和運(yùn)行。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對創(chuàng)新互聯(lián)的支持。

當(dāng)前標(biāo)題:SpringSecurity認(rèn)證提供程序示例詳解
轉(zhuǎn)載來于:http://www.rwnh.cn/article42/igpchc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、ChatGPT網(wǎng)站導(dǎo)航、營銷型網(wǎng)站建設(shè)、App設(shè)計、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
福贡县| 普安县| 夏河县| 光泽县| 杂多县| 新河县| 彭山县| 邯郸市| 余干县| 尤溪县| 容城县| 衡山县| 潢川县| 靖边县| 宁阳县| 沈阳市| 芜湖市| 凭祥市| 科尔| 朝阳县| 沙河市| 土默特左旗| 农安县| 杭锦旗| 荣成市| 定州市| 陵水| 扎兰屯市| 平江县| 沈阳市| 巴中市| 石门县| 定西市| 高雄县| 德庆县| 淮北市| 津市市| 万州区| 汝阳县| 龙江县| 浏阳市|