一、Spring Security中的認證 & 授權(前后端不分離)
1.1、MyWebSecurityConfigurerAdapter
/**
* @Author : 一葉浮萍歸大海
* @Date: 2024/1/11 21:50
* @Description:
*/
@Configuration
public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
/**
* 密碼加密器
* @return
*/
@Bean
PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
/**
* 配置基于內存的用戶
* @param auth
* @throws Exception
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("123456")
.roles("admin")
.and()
.withUser("root")
.password("123456")
.roles("root");
}
/**
* 靜態(tài)資源過濾
* @param web
* @throws Exception
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/js/**", "/css/**","/images/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/helloWorld")
.permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
/**
* 自定義登錄頁面,覆蓋Spring Security默認的登錄頁
* 僅僅配置loginPage("/login.html")其實對應兩個請求,即:
* GET:http://localhost:7001/login.html,用來獲取登錄頁面
* POST:http://localhost:7001/login.html,處理登錄請求
* 也可以將登錄頁面和處理登錄請求分開配置,如下:
*/
.loginPage("/login.html")
.loginProcessingUrl("/login")
/**
* 登錄成功回調:
* defaultSuccessUrl("/login/successGET")
* successForwardUrl("/login/successPOST")
*/
.defaultSuccessUrl("/login/successGET")
/**
* 登錄失敗回調:
* failureUrl("/login/failGET")
* failureForwardUrl("/login/failPOST")
*/
.failureForwardUrl("/login/failPOST")
.and()
/**
* 注銷登錄配置
* 1、默認注銷的 URL 是 /logout,是一個 GET 請求,我們可以通過 logoutUrl 方法來修改默認的注銷 URL
* 2、logoutRequestMatcher 方法不僅可以修改注銷 URL,還可以修改請求方式,實際項目中,這個方法和 logoutUrl 任意設置一個即可
* .logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
* 3、logoutSuccessUrl 表示注銷成功后要跳轉的頁面
* 4、deleteCookies 用來清除 cookie
* 5、clearAuthentication 和 invalidateHttpSession 分別表示清除認證信息和使 HttpSession 失效,默認可以不用配置,默認就會清除
*/
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login.html")
.deleteCookies()
.clearAuthentication(true)
.invalidateHttpSession(true)
.permitAll()
.and()
.csrf()
.disable();
}
}
1.2、LoginController
/**
* @Author : 一葉浮萍歸大海
* @Date: 2024/1/11 22:37
* @Description: 登錄成功 & 失敗 & 注銷登錄相關配置
*/
@RequestMapping("/login")
@RestController
public class LoginController {
@GetMapping("/successGET")
public R successGET() {
return R.ok().data("登錄成功【GET】");
}
@PostMapping("/successPOST")
public R successPOST() {
return R.ok().data("登錄成功【POST】");
}
@GetMapping("/failGET")
public R failGET() {
return R.error().data("登錄失敗【GET】");
}
@PostMapping("/failPOST")
public R failPOST() {
return R.error().data("登錄失敗【POST】");
}
@GetMapping("/logoutGET")
public R logoutGET() {
return R.ok().data("注銷成功【GET】");
}
@PostMapping("/logoutPOST")
public R logoutPOST() {
return R.ok().data("注銷成功【POST】");
}
}
1.3、登錄成功回調
1.3.1、概述
? ? ? ? 前后端不分離的登錄成功回調有兩個關鍵方法,即:defaultSuccessUrl 和?successForwardUrl。那么它們之間的區(qū)別是什么呢?? ? ? ?
(1)successForwardUrl 表示不管你是從哪里來的,登錄后一律跳轉到 successForwardUrl 指定的地址。例如 successForwardUrl 指定的地址為/login/successPOST,你在瀏覽器地址欄輸入http://localhost:7001/helloWorld,結果因為沒有登錄,會重定向到登錄頁面,即login.html頁面,當你登錄成功之后,就會服務端跳轉到/login/successPOST;或者你直接就在瀏覽器輸入了登錄頁面地址,登錄成功后也是來到/login/successPOST;
defaultSuccessUrl 有一個重載的方法,先說一個參數(shù)的 defaultSuccessUrl 方法,如果我們在 defaultSuccessUrl 中指定登錄成功的跳轉頁面為
(2)/login/successGET
,此時分兩種情況,如果你是直接在瀏覽器中輸入的登錄地址,登錄成功后,就直接跳轉到/login/successGET
,如果你是在瀏覽器中輸入了其他地址,例如?http://localhost:7001/helloWorld
,結果因為沒有登錄,又重定向到登錄頁面,此時登錄成功后,就不會來到/login/successGET
?,而是來到?/helloWorld
頁面;?
defaultSuccessUrl 還有一個重載的方法,第二個參數(shù)如果不設置默認為 false,也就是我們上面的的情況,如果手動設置第二個參數(shù)為 true,則 defaultSuccessUrl 的效果和successForwardUrl 一致;
(3)
注意事項:
? ? 一般情況下
defaultSuccessUrl 和?successForwardUrl只需配置一個即可,根據(jù)自己公司實際情況進行選擇。坑:
? ? ? ??? ?
? ?
defaultSuccessUrl對應的接口需為GET、successForwardUrl對應的接口需為POST,如上LoginController #successGET和successPOST:
1.4、登錄失敗回調
1.4.1、概述
????????前后端不分離的登錄失敗回調也有兩個關鍵方法,即:failureForwardUrl 和?failureUrl。那么它們之間的區(qū)別是什么呢?? ? ? ?
failureForwardUrl登錄失敗之后會發(fā)生服務端跳轉,failureUrl則是在登錄失敗之后,會發(fā)生重定向。
)
1.5、注銷登錄
1.5.1、概述
/**
?* 注銷登錄配置
?* ? ? 1、默認注銷的 URL 是 /logout,是一個 GET 請求,我們可以通過 logoutUrl 方法來修改默認的注銷 URL
?* ? ? 2、logoutRequestMatcher 方法不僅可以修改注銷 URL,還可以修改請求方式,實際項目中,這個方法和 logoutUrl 任意設置一個即可
?* ? ? ? ? ?.logoutRequestMatcher(new AntPathRequestMatcher("/logout","POST"))
?* ? ? 3、logoutSuccessUrl 表示注銷成功后要跳轉的頁面
?* ? ? 4、deleteCookies 用來清除 cookie
?* ? ? 5、clearAuthentication 和 invalidateHttpSession 分別表示清除認證信息和使 HttpSession 失效,默認可以不用配置,默認就會清除
?*/文章來源:http://www.zghlxwxcb.cn/news/detail-806393.html
1.5.2、配置
如上。?文章來源地址http://www.zghlxwxcb.cn/news/detail-806393.html
到了這里,關于系列四、Spring Security中的認證 & 授權(前后端不分離)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!