關(guān)于SpringSecurity的基本使用示例
Spring Security核心功能 關(guān)于安全方面的兩個(gè)主要區(qū)域是認(rèn)證和授權(quán)(或者訪(fǎng)問(wèn)控制),這兩點(diǎn)也是Spring Security核心功能 用戶(hù)認(rèn)證:驗(yàn)證某個(gè)用戶(hù)是否為系統(tǒng)中的合法主體,也就是說(shuō)用戶(hù)能否訪(fǎng)問(wèn)該系統(tǒng)。用戶(hù)認(rèn)證一般要求用戶(hù)提供用戶(hù)名和密碼。系統(tǒng)通過(guò)校驗(yàn)用戶(hù)名和密碼來(lái)完成認(rèn)證過(guò)程。 用戶(hù)授權(quán):驗(yàn)證謀而用戶(hù)是否有權(quán)限執(zhí)行某一操作。在一個(gè)系統(tǒng)中,不同用戶(hù)所具有的權(quán)限是不同的。
本質(zhì):就是一堆過(guò)濾器鏈
一、使用
1、直接引入依賴(lài)使用(不連接數(shù)據(jù)庫(kù))
1.1 引入依賴(lài)
<!--springsecurity-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>1.2 啟動(dòng)項(xiàng)目隨機(jī)訪(fǎng)問(wèn)controller的一個(gè)接口

賬號(hào)為user,密碼為控制臺(tái)輸出的密碼:

2、結(jié)合數(shù)據(jù)庫(kù)使用
2.1 編寫(xiě)類(lèi)實(shí)現(xiàn)UserDetailsService接口
package com.zzh.activiti.config.securityservice;
import com.zzh.activiti.service.UserService;
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 org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class UserDetailService implements UserDetailsService {
@Autowired
private UserService userInfoService;
/**
* 需新建配置類(lèi)注冊(cè)一個(gè)指定的加密方式Bean,或在下一步Security配置類(lèi)中注冊(cè)指定
*/
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 通過(guò)用戶(hù)名從數(shù)據(jù)庫(kù)獲取用戶(hù)信息
com.zzh.activiti.entity.User userInfo = userInfoService.getUserInfo(username);
if (userInfo == null) {
throw new UsernameNotFoundException("用戶(hù)不存在");
}
// 得到用戶(hù)角色
String role = userInfo.getRole();
// 角色集合
List<GrantedAuthority> authorities = new ArrayList<>();
// 角色必須以`ROLE_`開(kāi)頭,數(shù)據(jù)庫(kù)中沒(méi)有,則在這里加
authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
return new User(
userInfo.getName(),
// 因?yàn)閿?shù)據(jù)庫(kù)是明文,所以這里需加密密碼
passwordEncoder.encode(userInfo.getPassword()),
authorities
);
}
}2.2 編寫(xiě)類(lèi)繼承WebSecurityConfigurerAdapter實(shí)現(xiàn)securiy配置
package com.zzh.activiti.config;
import com.zzh.activiti.config.securityservice.UserDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
// 開(kāi)啟Security配置
@EnableWebSecurity
@Configuration
@Slf4j
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailService userDatailService;
/**
* 指定加密方式
*/
@Bean
public PasswordEncoder passwordEncoder(){
// 使用BCrypt加密密碼
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
log.error("aaa");
auth
// 從數(shù)據(jù)庫(kù)讀取的用戶(hù)進(jìn)行身份認(rèn)證
.userDetailsService(userDatailService)
.passwordEncoder(passwordEncoder());
}
}2.3瀏覽器訪(fǎng)問(wèn)controller層隨意接口

到此這篇關(guān)于關(guān)于SpringSecurity的基本使用示例的文章就介紹到這了,更多相關(guān)SpringSecurity基礎(chǔ)詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于通過(guò)java調(diào)用datax,返回任務(wù)執(zhí)行的方法
今天小編就為大家分享一篇關(guān)于通過(guò)java調(diào)用datax,返回任務(wù)執(zhí)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Java如何主動(dòng)從當(dāng)前線(xiàn)程獲取異常信息
這篇文章主要介紹了Java如何主動(dòng)從當(dāng)前線(xiàn)程獲取異常信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
tomcat目錄結(jié)構(gòu)簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了tomcat目錄結(jié)構(gòu)簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-07-07
基于springmvc之常用注解,操作傳入?yún)?shù)
這篇文章主要介紹了springmvc之常用注解,操作傳入?yún)?shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java8新特性之Base64詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java8新特性之Base64的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
java中利用List的subList方法實(shí)現(xiàn)對(duì)List分頁(yè)(簡(jiǎn)單易學(xué))
本篇文章主要介紹了java中l(wèi)ist數(shù)據(jù)拆分為sublist實(shí)現(xiàn)頁(yè)面分頁(yè)的簡(jiǎn)單代碼,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11

