激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - Spring Boot2.0使用Spring Security的示例代碼

Spring Boot2.0使用Spring Security的示例代碼

2021-05-26 13:40大魔王先生 Java教程

這篇文章主要介紹了Spring Boot2.0使用Spring Security的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、spring secutity簡介

spring 是一個非常流行和成功的 java 應用開發框架。spring security 基于 spring 框架,提供了一套 web 應用安全性的完整解決方案。一般來說,web 應用的安全性包括用戶認證(authentication)和用戶授權(authorization)兩個部分。用戶認證指的是驗證某個用戶是否為系統中的合法主體,也就是說用戶能否訪問該系統。用戶認證一般要求用戶提供用戶名和密碼。系統通過校驗用戶名和密碼來完成認證過程。用戶授權指的是驗證某個用戶是否有權限執行某個操作。在一個系統中,不同用戶所具有的權限是不同的。比如對一個文件來說,有的用戶只能進行讀取,而有的用戶可以進行修改。一般來說,系統會為不同的用戶分配不同的角色,而每個角色則對應一系列的權限。

對于上面提到的兩種應用情景,spring security 框架都有很好的支持。在用戶認證方面,spring security 框架支持主流的認證方式,包括 http 基本認證、http 表單驗證、http 摘要認證、openid 和 ldap 等。在用戶授權方面,spring security 提供了基于角色的訪問控制和訪問控制列表(access control list,acl),可以對應用中的領域對象進行細粒度的控制。

另外spring security也集成了oauth2.0,接下來我們就介紹下這兩種使用的,當然spring security還集成cas等等,如果你要了解更多請查看 官方文檔 ,我們下面的都是使用spring boot2.0做的demo,2.0以后已經集成了spring security5.0以上的版本;

二、basic認證

這個也是我們經常使用的基于表單的認證,輸入一個賬號和密碼點擊登錄這種,就是basic認證,我們接下主要會講一下使用以及5.0以后做了那些升級;

1.使用以及常用的一些參數的介紹

第一步使用maven引入spring security jia包,這里我們使用thymeleaf作為前端模板頁面,這里也有一個地方可以探討一波,為什么spring mvc可以自由切換模板,這個地方我們找個機會一起探討,這里先做下簡單的介紹;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<dependencies>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter</artifactid>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-security</artifactid>
 </dependency>
 <!-- 前端模板 thymeleaf 依賴 -->
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-thymeleaf</artifactid>
 </dependency>
 <!--安全認證框架-->
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <scope>test</scope>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-thymeleaf</artifactid>
 </dependency>
 <dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-security</artifactid>
 </dependency>
 </dependencies>

第二步引入java配置配置方案

這里我們先使用@configuration和@enablewebsecurity對java類進行配置,接下來我們就是繼承websecurityconfigureradapter,對里面的方法重寫就可以了,分別是對authenticationmanagerbuilder,websecurity,httpsecurity方法,我們主要介紹authenticationmanagerbuilder和httpsecurity,通過對這兩種方法重寫最終實現我們自定義認證;

先來介紹一下httpsecurity常用參數,如下圖用法基本脫離不了下面這些方法,可以基于認證的方式有formlogin、openidlogin、oauth2login,還可以做一些記住賬號操作rememberme,還可以進行session配置管理,還支持登出loginout等等,使用起來還是蠻簡單的,大家可以參照一下這篇文章,還是蠻詳細的;

Spring Boot2.0使用Spring Security的示例代碼

接下來我們再看下authenticationmanagerbuilder,我們重寫這個方法,可以基于內存用戶認證、數據庫認證、ldap認證、還可以自定義用戶服務、還可以自己定義認證。這里我們使用自定義認證的做demo,另外這個大家還可能有一個困惑的點,configglobal和configure的差別在哪里,這里大家可以 參考下這篇文章 ,spring security從3.2版本以后就默認開啟了crsf防護,這里是通過token方式去檢測的,在登陸的時候thymeleaf模板會生成_csrf的標簽來防止crsf,對csrf不懂的大家可以看下這篇文章 ,這個里面介紹一些防護csrf的手段,大家可以思考下,我的demo只是一個簡單的架子,為了是給大家介紹一些知識,可擴展大家根據這些介紹的知識可以隨心所欲的擴展自己想要的,不要拘泥于一種方法;

最后我還要介紹一下加密的方式,spring security 4的時候我們常用的加密方式是md5加鹽的方式,5.0以后版本就找不到md5passwordencoder,說明這個方法還是不夠安全,還是可以通過暴力破解可以搞定,可能我不行但是攔不住一些高手,大家可以看下官方支持的以及棄用一些方法:

Spring Boot2.0使用Spring Security的示例代碼

使用我就不介紹了,有興趣可以自己探索一波,還可以參考一下 文章一 、文章二 ,下面我粘貼我的代碼,講到的這些可以擴展的地方大家我在代碼中會標識清楚,喜歡動手可以嘗試一下,我的重點是oauth2驗證;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/**
 *自定義認證
 * created by wangt on 2018/7/29.
 */
@configuration
@enablewebsecurity
@enableglobalmethodsecurity
public class websecurityconfig extends websecurityconfigureradapter {
 
 /**
 * http資源認證
 * @param http
 * @throws exception
 */
 @override
 protected void configure(httpsecurity http) throws exception {
 http.authorizerequests()
  .antmatchers("/","/home").permitall()
  .anyrequest().authenticated()
  .and()
  .formlogin()
  .loginpage("/login")
  .permitall()
  .and()
  .logout()
  .permitall();
 }
 
 /**
 * 自定義認證策略
 */
 @autowired
 public void configglobal(authenticationmanagerbuilder auth) throws exception {
 auth.authenticationprovider(authprovider()).erasecredentials(true);
 }
 
 @bean
 public authprovider authprovider(){
 return new authprovider();
 }
}
 
 
/**
 * 自定義認證
 * created by wangt on 2018/8/18.
 */
public class authprovider implements authenticationprovider {
 private final bcryptpasswordencoder bcryptpasswordencoder=new bcryptpasswordencoder();
 
 @override
 public authentication authenticate(authentication authentication) throws authenticationexception {
 string username = authentication.getname();
 string inputpassword = (string) authentication.getcredentials();
 
 //如果你要使用thymeleaf認證方言可以擴展一下user
 //grantedauthority這個是使用方言的屬性,有興趣了解下
 //其實也就是通過這個使用if去判斷
 user user =new user();
 user.setname("admin");
 user.setpassword("admin");
 if (user == null) {
  throw new authenticationcredentialsnotfoundexception("autherror");
 }
 
 //這一塊可以自定義一些加密方式
 //自己動手實現一下
 if (true) {
  //這塊有好幾個構造
  //如果使用方言你可以使用3個參數的構造函數
  return new usernamepasswordauthenticationtoken(user, null);
 
 }
 
 throw new badcredentialsexception("autherror");
 }
 
 @override
 public boolean supports(class<?> aclass) {
 return true;
 }
}
 
 
/**
 * created by wangt on 2018/8/18.
 */
@configuration
public class webmvcconfig implements webmvcconfigurer {
 
 //如果使用thymeleaf方言在這塊擴展
 
 
 @override
 public void addviewcontrollers(viewcontrollerregistry registry) {
 registry.addviewcontroller("/index").setviewname("index");
 registry.addviewcontroller("/").setviewname("index");
 registry.addviewcontroller("/hello").setviewname("hello");
 registry.addviewcontroller("/login").setviewname("login");
 }
}
 
 
<!doctype html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>title</title>
</head>
<body>
<!--主頁面 index-->
您好!歡迎光臨!
<a href="/login">登錄</a>
<a href="/hello">限制訪問的頁面</a>
</body>
</html>
 
 
<!doctype html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <title>title</title>
</head>
<body>
<!--hello頁面-->
hello
</body>
</html>
 
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <meta charset="utf-8">
 <title>title</title>
</head>
<body>
<!--登錄頁面-->
<form th:action="@{/login}" method="post">
 <div><label> user name : <input type="text" name="username"/> </label></div>
 <div><label> password: <input type="password" name="password"/> </label></div>
 <div><input type="submit" value="登錄"/></div>
</form>
 
</body>
</html>
 
/**
 * 登錄控制器
 * created by wangt on 2018/8/18.
 */
@controller
public class logincontroller {
 
 @getmapping("/login")
 public string login(){
 return "/login";
 }
 
}
 
/**
 * 主頁
 * created by wangt on 2018/7/28.
 */
@controller
public class homecontroller {
 
 @getmapping("/")
 public string index(){
  return "index";
 }
}
 
/**
 * hello頁
 * created by wangt on 2018/8/19.
 */
@controller
public class hellocontroller {
 
 @getmapping("/hello")
 public string index(){
 return "hello";
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/wtzbk/p/9387859.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美伦理一区二区 | 天天色综合6 | 日本黄色网战 | 7777视频 | 欧美大屁股精品毛片视频 | 久久久成人一区二区免费影院 | av电影在线网站 | 亚洲天堂一级片 | 87成人免费看片 | 国产一区二区三区四 | 噜噜色av| 日韩欧美精品电影 | 日韩视频一区二区三区在线观看 | 粉色视频污 | 91av网址 | 欧美日本国产精品 | 1314成人网 | 91久久国产综合精品女同国语 | 日本最新免费二区三区 | 99视频有精品视频高清 | 亚洲网站免费 | 在线小视频国产 | 国产美女白浆 | 内地av在线 | 蜜桃麻豆视频 | 91成人在线网站 | 久久精品久久精品国产大片 | 色999久久久精品人人澡69 | 午夜视频福利 | 黄网站在线免费 | 中文字幕精品一区久久久久 | 72pao成人国产永久免费视频 | 香蕉国产| 一区二区三区国产好的精 | 久久精品99久久久久久2456 | xxxxhd18hd日本hd| 一级毛片在线观看免费 | 国产一区二区三区视频观看 | xp123精品视频| 日韩视频在线观看免费 | 毛毛片在线看 |