目錄
SpringSecurity權限管理系統實戰—一、專案簡介和開發環境準備
SpringSecurity權限管理系統實戰—二、日志、介面檔案等實作
SpringSecurity權限管理系統實戰—三、主要頁面及介面實作
SpringSecurity權限管理系統實戰—四、整合SpringSecurity(上)
SpringSecurity權限管理系統實戰—五、整合SpringSecurity(下)
SpringSecurity權限管理系統實戰—六、SpringSecurity整合jwt
SpringSecurity權限管理系統實戰—七、處理一些問題
SpringSecurity權限管理系統實戰—八、AOP 記錄用戶日志、例外日志
SpringSecurity權限管理系統實戰—九、資料權限的配置
前言
這幾天的時間去弄博客了,這個專案就被擱在一邊了,
在之前我是用wordpress來搭的博客,用的阿里云的學生機,就卡的不行,體驗極差,也沒有發布過多少內容,后來又想著自己寫一個博客系統,后臺部分已經開發了大半,懶癌犯了,就一直擱置了(圖片上的所有能點擊的介面都實作了),現在回過去一看,介面十分混亂,冗余,可能不會再用來作為自己的博客了(隨便再寫寫,做個畢設專案吧)
然后又想著用靜態博客,繞來繞去后,最終選用了vuepress來搭建靜態博客,部署的時候又順帶著復習了下git的知識(平時idea插件用的搞得我git命令都忘得差不多了),現在的博客是根據vuepress-theme-roco主題魔改的,給張照片感受下
已經部署到github pages,可以訪問www.codermy.cn查看, 目前還沒有備案成功,尚未配置cdn,所以可能會加載有點慢,國內也可以訪問 witmy.gitee.io 查看,
一、Spring Security 介紹
Spring Security 是Spring專案之中的一個安全模塊,可以非常方便與spring專案集成,自從有了 Spring Boot 之后,Spring Boot 對于 Spring Security 提供了 自動化配置方案,可以零配置使用 Spring Security,
其實Spring Security 最早不叫 Spring Security ,叫 Acegi Security,后來才發展成為Spring的子專案,由于SpringBoot的大火,讓Spring系列的技術都得到了非常多的關注度,SpringSecurity同樣也沾了一把光,
一般來說,Web 應用的安全性包括兩部分:
- 用戶認證(Authentication)
- 用戶授權(Authorization)
簡單來說,認證就是登錄,授權其實就是權限的鑒別,看用戶是否具備相應請求的權限,
二、整合SpringSecurity
在SpringBoot中想要使用SpringSecurity,只要添加SpringSecurity的依賴即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
這個依賴在最初給的pom中已經有了,不過給注釋了,取消掉就可以,其余什么都不用做,啟動專案,
啟動完成后,我們訪問http://localhost:8080或者其中的任何介面,都會重定向到登錄頁面,
SpringSecurity默認的用戶名是user,密碼則在啟動專案時會列印在控制臺上,
Using generated security password: 21d26148-7f1e-403a-9041-1bc62a034871
21d26148-7f1e-403a-9041-1bc62a034871就是密碼,每次啟動都會分配不一樣的密碼,SpringSecurity同樣支持自定義密碼,只要在application.yml中簡單配置一下即可
spring:
security:
user:
name: admin
password: 123456
輸入用戶名密碼,登錄后就能訪問index頁面了
三、自定義登錄頁
SpringSecurity默認的登錄頁在SpringBoot2.0之后已經做過升級了,以前的更丑,就是一個沒有樣式的form表單,現在這個雖然好看了不少,但是感徑訓是單調了些,
那么我們需要新建一個SpringSecurityConfig類繼承WebSecurityConfigurerAdapter
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/PearAdmin/**");//放行靜態資源
}
/**
* anyRequest | 匹配所有請求路徑
* access | SpringEl運算式結果為true時可以訪問
* anonymous | 匿名可以訪問
* denyAll | 用戶不能訪問
* fullyAuthenticated | 用戶完全認證可以訪問(非remember-me下自動登錄)
* hasAnyAuthority | 如果有引數,引數表示權限,則其中任何一個權限可以訪問
* hasAnyRole | 如果有引數,引數表示角色,則其中任何一個角色可以訪問
* hasAuthority | 如果有引數,引數表示權限,則其權限可以訪問
* hasIpAddress | 如果有引數,引數表示IP地址,如果用戶IP和引數匹配,則可以訪問
* hasRole | 如果有引數,引數表示角色,則其角色可以訪問
* permitAll | 用戶可以任意訪問
* rememberMe | 允許通過remember-me登錄的用戶訪問
* authenticated | 用戶登錄后可訪問
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.html")//登錄頁面
.loginProcessingUrl("/login")//登錄介面
.permitAll()
.and()
.csrf().disable();//關閉csrf
}
}
把login.html移動到static目錄下,不要忘記把form表單的action替換成/login
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href=https://www.cnblogs.com/codermy/p/"/PearAdmin/admin/css/pearForm.css" />
<link rel="stylesheet" href="/PearAdmin/component/layui/css/layui.css" />
<link rel="stylesheet" href="/PearAdmin/admin/css/pearButton.css" />
<link rel="stylesheet" href="/PearAdmin/assets/login.css" />
<body background="PearAdmin/admin/images/background.svg" >
<script src="/PearAdmin/component/layui/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'element','jquery'], function() {
var form = layui.form;
var element = layui.element;
var $ = layui.jquery;
$("body").on("click",".login",function(){
location.href=https://www.cnblogs.com/codermy/p/"index"
})
})
</script>
