spring-boot使用spring-security进行身份认证(1)
說明 springboot 版本 2.0.3
源碼地址:點擊跳轉
一、 介紹
??Spring Security 是一個能夠為基于 Spring 的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在 Spring 應用上下文中配置的 Bean,充分利用了 Spring IoC,DI(控制反轉 Inversion of Control ,DI:Dependency Injection 依賴注入)和 AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。
二、 環境搭建
??建立 springboot2 項目,加入 security 依賴,mybatis 依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version> </dependency> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope> </dependency> 復制代碼數據庫為傳統的用戶--角色--權限,權限表記錄了 url 和 method,springboot 配置文件如下:
mybatis: type-aliases-package: com.example.demo.entity server: port: 8081 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: 123456 http: encoding: charset: utf-8 enabled: true 復制代碼springboot 啟動類中加入如下代碼,設置路由匹配規則。
protected void configurePathMatch(PathMatchConfigurer configurer) {configurer.setUseSuffixPatternMatch(false) //設置路由是否后綴匹配,譬如/user能夠匹配/user.,/user.aa.setUseTrailingSlashMatch(false); //設置是否后綴路徑匹配,比如/user能夠匹配/user,/user/ } 復制代碼三、 security 配置
??默認情況下 security 是無需任何自定義配置就可使用的,我們不考慮這種方式,直接講如何個性化登錄過程。
1、 建立 security 配置文件,目前配置文件中還沒有任何配置。
public class SecurityConfig extends WebSecurityConfigurerAdapter { } 復制代碼2、 個性化登錄,security 中的登錄如下:
- security 需要一個 user 的實體類實現UserDetails接口,該實體類最后與系統中用戶的實體類分開,代碼如下:
- 編寫了實體類還需要編寫一個服務類 SecurityService 實現UserDetailsService接口,重寫 loadByUsername 方法,通過這個方法根據用戶名獲取用戶信息,代碼如下:
- 通常我們會對密碼進行加密,所有還要編寫一個 passwordencode 類,實現 PasswordEncoder 接口,代碼如下:
3、 編輯配置文件
- 編寫 config Bean 以使用上面定義的驗證邏輯,securityUserService、myPasswordEncoder 通過@Autowired 引入。
- 然后編寫 configure Bean(和上一個不一樣,參數不同),實現 security 驗證邏輯,代碼如下:
到這里便可實現 security 與 springboot 的基本整合。
四、實現記住我功能
1、 建表
??記住我功能需要數據庫配合實現,首先要在數據庫建一張表用戶保存 cookie 和用戶名,數據庫建表語句如下:不能做修改
CREATE TABLE `persistent_logins` (`username` varchar(64) NOT NULL,`series` varchar(64) NOT NULL,`token` varchar(64) NOT NULL,`last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`series`) ) 復制代碼2、 編寫 rememberMeservice Bean
??代碼如下:
public RememberMeServices rememberMeServices(){JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();jdbcTokenRepository.setDataSource(dataSource);PersistentTokenBasedRememberMeServices rememberMeServices =new PersistentTokenBasedRememberMeServices("INTERNAL_SECRET_KEY",securityUserService,jdbcTokenRepository);//還可設置許多其他屬性rememberMeServices.setCookieName("kkkkk"); //客戶端cookie名return rememberMeServices;} 復制代碼dataSource 為@Autowired 引入
3、 配置文件設置 remember
??在 config(HttpSecurity http)中加入記住我功能
.rememberMe().rememberMeServices(rememberMeServices()).key("INTERNAL_SECRET_KEY") 復制代碼在登錄表單中設置 remember-me 即可實現記住我功能。
本文原創發布于:www.tapme.top/blog/detail…
總結
以上是生活随笔為你收集整理的spring-boot使用spring-security进行身份认证(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring AOP 应用篇
- 下一篇: 爬取json Swaggerui界面