這篇文章給大家介紹SpringSecurity中怎么實(shí)現(xiàn)表單登錄功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)自成立以來,一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。
2. Maven 依賴
要將Maven依賴項(xiàng)添加到項(xiàng)目中,請(qǐng)參閱Spring Security with Maven 一文。 標(biāo)準(zhǔn)的 spring-security-web 和 spring-security-config 都是必需的。
3. Spring Security Java配置
我們首先創(chuàng)建一個(gè)擴(kuò)展 WebSecurityConfigurerAdapter
的 Spring Security 配置類。 通過添加 @EnableWebSecurity ,我們獲得了Spring Security和MVC集成支持:
@Configuration@EnableWebSecuritypublic 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(); }}
在此示例中,我們使用內(nèi)存身份驗(yàn)證并定義了3個(gè)用戶。
現(xiàn)在來看看我們用來創(chuàng)建表單登錄配置的元素。
3.1. authorizeRequests()
我們?cè)试S匿名訪問*/login*,以便用戶可以進(jìn)行身份驗(yàn)證,同時(shí)也是保護(hù)其他請(qǐng)求。請(qǐng)注意,*antMatchers()*元素的順序很重要 - 首先需要填寫具體的路徑規(guī)則,然后是才是大致匹配的規(guī)則。
3.2. formLogin()
這有幾種方法可以用來配置表單登錄的行為:
loginPage() – 自定義登錄頁面loginProcessingUrl() – 提交username和password的URLdefaultSuccessUrl() – 登錄成功后跳轉(zhuǎn)的URLfailureUrl() – 登錄失敗后跳轉(zhuǎn)的URL
3.3. Authentication Manager
身份驗(yàn)證提供程序由一個(gè)簡單的內(nèi)存實(shí)現(xiàn)支持 - InMemoryUserDetailsManager 。 當(dāng)尚不需要完整的持久性機(jī)制時(shí),這對(duì)于進(jìn)行快速原型設(shè)計(jì)很有用。
從Spring 5開始,我們還必須定義密碼編碼器。 在我們的例子中,我們使用了 BCryptPasswordEncoder 。
4. 添加Spring Security到Web應(yīng)用
要使用上面定義的Spring Security配置,我們需要將其添加到Web應(yīng)用程序。 在這種情況下,我們不需要任何 web.xml :
public class SpringApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class[] {SecSecurityConfig.class}; }}
注意,如果我們使用Spring Boot應(yīng)用程序,則不需要此初始化程序。 有關(guān)如何在Spring Boot中加載安全性配置的更多詳細(xì)信息,詳情參閱 Spring Boot security auto-configuration
5. Spring Security XML配置
我們來看看相應(yīng)的XML配置。整個(gè)項(xiàng)目使用Java配置,因此我們需要通過Java @Configuration 類導(dǎo)入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之前,我們?cè)?jīng)在 web.xml 中配置Spring Security - 只有一個(gè)額外的過濾器添加到 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 - 簡單地委托給一個(gè)Spring管理的bean - FilterChainProxy-它本身可以從完整的Spring bean生命周期管理中受益。
7. Login Form
登錄表單頁面使用簡單的機(jī)制將視圖名稱映射到URL 向Spring MVC注冊(cè),且無需編寫Controller:
registry.addViewController("/login.html");
對(duì)應(yīng)于 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包含以下相關(guān)組件:
login - 接受表單POST的URL,觸發(fā)身份驗(yàn)證過程username - 用戶名password - 密碼
8.進(jìn)一步配置Spring登錄
當(dāng)我們?cè)谏厦娼榻BSpring安全配置時(shí),我們簡要討論了一些登錄機(jī)制的配置 - 現(xiàn)在詳細(xì)介紹一下。
覆蓋Spring Security中大多數(shù)默認(rèn)值的一個(gè)原因是隱藏應(yīng)用程序受Spring Security保護(hù)的事實(shí),并最大限度地減少潛在攻擊者對(duì)應(yīng)用程序的了解。
完全配置后,login元素如下所示:
@Overrideprotected void configure(HttpSecurity http) throws Exception { http.formLogin() .loginPage("/login.html") .loginProcessingUrl("/perform_login") .defaultSuccessUrl("/homepage.html",true) .failureUrl("/login.html?error=true")}
或者相應(yīng)的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'
如果我們不指定這個(gè),Spring Security將在*/login*上生成一個(gè)非?;镜牡卿洷韱巍?/p>
8.2. 登錄的POST URL
觸發(fā)身份驗(yàn)證默認(rèn)的URL是*/login*,我們可以使用 loginProcessingUrl 方法來覆蓋此URL:
http.formLogin() .loginProcessingUrl("/perform_login")
或者,使用XML配置:
login-processing-url="/perform_login"
覆蓋此默認(rèn)URL的一個(gè)很好的理由是:隱藏應(yīng)用程序受 Spring Security 保護(hù)的事實(shí) - 該信息不應(yīng)在外部提供。
8.3. 登錄成功頁面
成功登錄過程后,用戶將被重定向到頁面 - 默認(rèn)情況下,該頁面是Web應(yīng)用程序的根目錄。
我們可以通過*defaultSuccessUrl()*
方法覆蓋它:
http.formLogin() .defaultSuccessUrl("/homepage.html")
或者,使用XML配置:
default-target-url="/homepage.html"
如果 always-use-default-target
設(shè)置為 true ,則用戶始終會(huì)重定向到此頁面。 如果該屬性設(shè)置為 false ,則在提示進(jìn)行身份驗(yàn)證之前,用戶將被重定向到他們想要訪問的上一頁。
8.4. 登錄失敗頁面
與登錄頁面相同,默認(rèn)情況下, Spring Security 會(huì)在*/login?error*
自動(dòng)生成登錄失敗頁面。
要覆蓋它,我們可以使用*failureUrl()*
方法:
http.formLogin() .failureUrl("/login.html?error=true")
或者XML:
authentication-failure-url="/login.html?error=true"
關(guān)于SpringSecurity中怎么實(shí)現(xiàn)表單登錄功能就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
網(wǎng)頁名稱:SpringSecurity中怎么實(shí)現(xiàn)表單登錄功能
URL標(biāo)題:http://muchs.cn/article18/gdipdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、域名注冊(cè)、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)