中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Spring 中使用Security實現表單登錄功能

發布時間:2021-05-27 18:00:08 來源:億速云 閱讀:266 作者:Leah 欄目:編程語言

這篇文章給大家介紹怎么在Spring 中使用Security實現表單登錄功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

2. Maven 依賴

要將Maven依賴項添加到項目中,請參閱Spring Security with Maven 一文。 標準的 spring-security-web 和 spring-security-config 都是必需的。

3. Spring Security Java配置

我們首先創建一個擴展 WebSecurityConfigurerAdapter 的 Spring Security 配置類。 通過添加 @EnableWebSecurity ,我們獲得了Spring Security和MVC集成支持:

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
     .withUser("user1").password(passwordEncoder().encode("user1Pass")).roles("USER")
     .and()
     .withUser("user2").password(passwordEncoder().encode("user2Pass")).roles("USER")
     .and()
     .withUser("admin").password(passwordEncoder().encode("adminPass")).roles("ADMIN");
  }
  @Override
  protected void configure(final HttpSecurity http) throws Exception {
    http
     .csrf().disable()
     .authorizeRequests()
     .antMatchers("/admin/**").hasRole("ADMIN")
     .antMatchers("/anonymous*").anonymous()
     .antMatchers("/login*").permitAll()
     .anyRequest().authenticated()
     .and()
     .formLogin()
     .loginPage("/login.html")
     .loginProcessingUrl("/perform_login")
     .defaultSuccessUrl("/homepage.html", true)
     //.failureUrl("/login.html?error=true")
     .failureHandler(authenticationFailureHandler())
     .and()
     .logout()
     .logoutUrl("/perform_logout")
     .deleteCookies("JSESSIONID")
     .logoutSuccessHandler(logoutSuccessHandler());
  }
  @Bean
  public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
  }
}

在此示例中,我們使用內存身份驗證并定義了3個用戶。

現在來看看我們用來創建表單登錄配置的元素。

3.1. authorizeRequests()

我們允許匿名訪問*/login*,以便用戶可以進行身份驗證,同時也是保護其他請求。請注意,*antMatchers()*元素的順序很重要 - 首先需要填寫具體的路徑規則,然后是才是大致匹配的規則。

3.2. formLogin()

這有幾種方法可以用來配置表單登錄的行為:

loginPage()  – 自定義登錄頁面
loginProcessingUrl()  – 提交username和password的URL
defaultSuccessUrl()  – 登錄成功后跳轉的URL
failureUrl()  – 登錄失敗后跳轉的URL

3.3. Authentication Manager

身份驗證提供程序由一個簡單的內存實現支持 - InMemoryUserDetailsManager 。 當尚不需要完整的持久性機制時,這對于進行快速原型設計很有用。

從Spring 5開始,我們還必須定義密碼編碼器。 在我們的例子中,我們使用了 BCryptPasswordEncoder 。

4. 添加Spring Security到Web應用

要使用上面定義的Spring Security配置,我們需要將其添加到Web應用程序。 在這種情況下,我們不需要任何 web.xml :

public class SpringApplicationInitializer 
 extends AbstractAnnotationConfigDispatcherServletInitializer {
  
  protected Class<?>[] getRootConfigClasses() {
    return new Class[] {SecSecurityConfig.class};
  }
}

注意,如果我們使用Spring Boot應用程序,則不需要此初始化程序。 有關如何在Spring Boot中加載安全性配置的更多詳細信息,詳情參閱 Spring Boot security auto-configuration

5. Spring Security XML配置

我們來看看相應的XML配置。整個項目使用Java配置,因此我們需要通過Java @Configuration 類導入XML配置文件:

@Configuration
@ImportResource({ "classpath:webSecurityConfig.xml" })
public class SecSecurityConfig {
  public SecSecurityConfig() {
   super();
  }
}

以及Spring Security 的XML配置– webSecurityConfig.xml :

<http use-expressions="true">
  <intercept-url pattern="/login*" access="isAnonymous()" />
  <intercept-url pattern="/**" access="isAuthenticated()"/>
 
  <form-login login-page='/login.html'
   default-target-url="/homepage.html"
   authentication-failure-url="/login.html?error=true" />
  <logout logout-success-url="/login.html" />
</http>
 
<authentication-manager>
  <authentication-provider>
    <user-service>
      <user name="user1" password="user1Pass" authorities="ROLE_USER" />
    </user-service>
    <password-encoder ref="encoder" />
  </authentication-provider>
</authentication-manager>
 
<beans:bean id="encoder"
 class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
</beans:bean>

6. web.xml

在引入Spring 4之前,我們曾經在 web.xml 中配置Spring Security - 只有一個額外的過濾器添加到 Spring MVC 的web.xml中:

<display-name>Spring Secured Application</display-name>
 
<!-- Spring MVC -->
<!-- ... -->
<!-- Spring Security -->
<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

過濾器 - DelegatingFilterProxy - 簡單地委托給一個Spring管理的bean - FilterChainProxy-它本身可以從完整的Spring bean生命周期管理中受益。

7. Login Form

登錄表單頁面使用簡單的機制將視圖名稱映射到URL 向Spring MVC注冊,且無需編寫Controller:

registry.addViewController("/login.html");

對應于 login.jsp :

<html>
<head></head>
<body>
  <h2>Login</h2>
  <form name='f' action="login" method='POST'>
   <table>
     <tr>
      <td>User:</td>
      <td><input type='text' name='username' value=''></td>
     </tr>
     <tr>
      <td>Password:</td>
      <td><input type='password' name='password' /></td>
     </tr>
     <tr>
      <td><input name="submit" type="submit" value="submit" /></td>
     </tr>
   </table>
 </form>
</body>
</html>

Spring Login form包含以下相關組件:

login  - 接受表單POST的URL,觸發身份驗證過程
username  - 用戶名
password  - 密碼

8.進一步配置Spring登錄

當我們在上面介紹Spring安全配置時,我們簡要討論了一些登錄機制的配置 - 現在詳細介紹一下。

覆蓋Spring Security中大多數默認值的一個原因是隱藏應用程序受Spring Security保護的事實,并最大限度地減少潛在攻擊者對應用程序的了解。

完全配置后,login元素如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.formLogin()
   .loginPage("/login.html")
   .loginProcessingUrl("/perform_login")
   .defaultSuccessUrl("/homepage.html",true)
   .failureUrl("/login.html?error=true")
}

或者相應的XML配置:

<form-login
 login-page='/login.html'
 login-processing-url="/perform_login"
 default-target-url="/homepage.html"
 authentication-failure-url="/login.html?error=true"
 always-use-default-target="true"/>

8.1. 登錄頁

接下來,讓我們看看如何使用*loginPage()*方法配置自定義登錄頁面:

http.formLogin()
  .loginPage("/login.html")

或者,使用XML配置:

login-page='/login.html'

如果我們不指定這個,Spring Security將在*/login*上生成一個非常基本的登錄表單。

8.2. 登錄的POST URL

觸發身份驗證默認的URL是*/login*,我們可以使用 loginProcessingUrl 方法來覆蓋此URL:

http.formLogin()
 .loginProcessingUrl("/perform_login")

或者,使用XML配置:

login-processing-url="/perform_login"

覆蓋此默認URL的一個很好的理由是:隱藏應用程序受 Spring Security 保護的事實 - 該信息不應在外部提供。

8.3. 登錄成功頁面

成功登錄過程后,用戶將被重定向到頁面 - 默認情況下,該頁面是Web應用程序的根目錄。

我們可以通過*defaultSuccessUrl()*方法覆蓋它:

http.formLogin()
 .defaultSuccessUrl("/homepage.html")

或者,使用XML配置:

default-target-url="/homepage.html"

如果 always-use-default-target 設置為 true ,則用戶始終會重定向到此頁面。 如果該屬性設置為 false ,則在提示進行身份驗證之前,用戶將被重定向到他們想要訪問的上一頁。

8.4. 登錄失敗頁面

與登錄頁面相同,默認情況下, Spring Security 會在*/login?error*自動生成登錄失敗頁面。

要覆蓋它,我們可以使用*failureUrl()*方法:

http.formLogin()
 .failureUrl("/login.html?error=true")

或者XML:

authentication-failure-url="/login.html?error=true"

關于怎么在Spring 中使用Security實現表單登錄功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉荫县| 屏东县| 久治县| 汤阴县| 山西省| 鹰潭市| SHOW| 逊克县| 霍林郭勒市| 蕉岭县| 渭源县| 济源市| 安顺市| 天长市| 华阴市| 岢岚县| 加查县| 宁安市| 吉安市| 日喀则市| 屏东县| 土默特左旗| 砀山县| 济源市| 丰原市| 同仁县| 乐都县| 咸丰县| 兰考县| 广德县| 正宁县| 台中县| 古丈县| 太仓市| 昌都县| 比如县| 枞阳县| 河北省| 淮滨县| 甘谷县| 英山县|