spring Security的自定義用戶(hù)認(rèn)證過(guò)程詳解
首先我需要在xml文件中聲明.我要進(jìn)行自定義用戶(hù)的認(rèn)證類(lèi),也就是我要自己從數(shù)據(jù)庫(kù)中進(jìn)行查詢(xún)
<http pattern="/*.html" security="none"/> <http pattern="/css/**" security="none"/> <http pattern="/img/**" security="none"/> <http pattern="/js/**" security="none"/> <http pattern="/plugins/**" security="none"/> <http pattern="/seller/add.do" security="none"/> <!-- use-expressions:設(shè)置是否啟動(dòng)SpEL表達(dá)式,默認(rèn)值是true。 --> <http use-expressions="false"> <!-- 配置SpringSecurity的攔截路徑(攔截規(guī)則) * pattern:配置攔截規(guī)則。 /* 代表的是根路徑下的所有資源(不包含子路徑) /**代表的是根路徑下所有的資源(包含子路徑) * access:設(shè)置角色 角色命名 ROLE_角色名稱(chēng) 如: ROLE_USER --> <intercept-url pattern="/**" access="ROLE_SELLER"/> <!-- 開(kāi)啟表單驗(yàn)證 username-parameter="username" password-parameter="password" login-page :登錄頁(yè)面名稱(chēng) 以 / 開(kāi)始 default-target-url :登錄成功后跳轉(zhuǎn)的頁(yè)面 login-processing-url:提交的路徑的設(shè)置 默認(rèn)值"/login" 可以修改 --> <form-login login-page="/shoplogin.html" default-target-url="/admin/index.html" always-use-default-target="true" authentication-failure-url="/shoplogin.html"/> <!-- 不使用csrf的校驗(yàn) --> <csrf disabled="true"/> <!-- 配置框架頁(yè)面不攔截 --> <headers> <frame-options policy="SAMEORIGIN"/> </headers> <!-- 注銷(xiāo)的配置 --> <logout logout-url="/logout" logout-success-url="/shoplogin.html" /> </http> <!-- 配置認(rèn)證管理器 --> <authentication-manager> <!-- 認(rèn)證的提供者 --> <authentication-provider user-service-ref="userDetailService"> <password-encoder ref="passwordEncoder"></password-encoder> </authentication-provider> </authentication-manager> <!-- 配置自定義的認(rèn)證類(lèi) --> <beans:bean id="userDetailService" class="com.qingmu2.core.service.UserDetailServiceImpl"> <beans:property name="sellerService" ref="sellerService"></beans:property> </beans:bean> <!--加密時(shí)候使用的算法是BCryptPasswordEncoder--> <beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
配置完自定義的文件以后,在需要自定義認(rèn)證類(lèi)的模塊中實(shí)現(xiàn)
UserDetailsService
package com.qingmu2.core.service; import com.alibaba.dubbo.config.annotation.Reference; import com.qingmu2.core.pojo.seller.Seller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; /** * 自定義的認(rèn)證類(lèi) * @Auther:qingmu * @Description:腳踏實(shí)地,只為出人頭地 * @Date:Created in 8:33 2019/5/31 */ public class UserDetailServiceImpl implements UserDetailsService { private SellerService sellerService; public UserDetailServiceImpl() { } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { Seller seller = sellerService.findOne(username); if(null!=seller){ //判斷一次商家是否被審核通過(guò). if("1".equals(seller.getStatus())){ //創(chuàng)建一個(gè)集合,用來(lái)存儲(chǔ)權(quán)限 HashSet<GrantedAuthority> authorities = new HashSet<>(); authorities.add(new SimpleGrantedAuthority("ROLE_SELLER")); //將這個(gè)用戶(hù)的信息返回給認(rèn)證類(lèi) return new User(username,seller.getPassword(),authorities); } } //沒(méi)有這個(gè)用戶(hù),則返回null return null; } public UserDetailServiceImpl(SellerService sellerService) { this.sellerService = sellerService; } public SellerService getSellerService() { return sellerService; } public void setSellerService(SellerService sellerService) { this.sellerService = sellerService; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot復(fù)雜參數(shù)應(yīng)用詳細(xì)講解
我們?cè)诰帉?xiě)接口時(shí)會(huì)傳入復(fù)雜參數(shù),如Map、Model等,這種類(lèi)似的參數(shù)會(huì)有相應(yīng)的參數(shù)解析器進(jìn)行解析,并且最后會(huì)將解析出的值放到request域中,下面我們一起來(lái)探析一下其中的原理2022-09-09maven-surefire-plugin總結(jié)示例詳解
這篇文章主要介紹了maven-surefire-plugin總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
這篇文章主要介紹了Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下2016-11-11java顯示當(dāng)前美國(guó)洛杉磯時(shí)間
這篇文章主要介紹了java顯示當(dāng)前美國(guó)洛杉磯時(shí)間的方法,也就是當(dāng)前時(shí)間的切換,需要的朋友可以參考下2014-02-02Spring注入Map集合實(shí)現(xiàn)策略模式詳解
這篇文章主要介紹了Spring注入Map集合實(shí)現(xiàn)策略模式詳解,Spring提供通過(guò)@Resource注解將相同類(lèi)型的對(duì)象注入到Map集合,并將對(duì)象的名字作為key,對(duì)象作為value封裝進(jìn)入Map,需要的朋友可以參考下2023-11-11