日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java security 详解_Spring Security入门教程 通俗易懂 超详细 【内含案例】

發布時間:2024/8/5 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java security 详解_Spring Security入门教程 通俗易懂 超详细 【内含案例】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Security的簡單使用

簡介

SSM 整合 Security 是比較麻煩的,雖然Security的功能比 Shiro 強大,相反卻沒有Shiro的使用量多

SpringBoot出現后簡化了Spring系列的配置文件,因此SpringSecurity的使用逐漸增加

一、創建項目

在 SpringBoot 中直接引入 Spring Security 依賴即可

創建項目的啟動類

創建 SecurityController 類

啟動后訪問 localhost:8080/hello

會自動跳到 localhost:8080/login

需要登錄后才能訪問 /hello

二、用戶名配置

默認情況下用戶名是 user ,而密碼會在項目啟動時 控制臺 打印出一串隨機 字符串,這就是密碼.每次啟動項目,密碼都不一樣

對登錄的用戶名/密碼進行配置,有三種不同的方式

在 application 配置文件中聲明

在 java 代碼配置在內存里

通過獲取 數據庫

第一種方式 application.yml 文件中

第二種方式 創建一個SecurityConfig配置類,繼承 WebSecurityConfigurerAdapter

第三種方法沒有進行演示,就是在數據庫中取出username和password配置到內存中

三、忽略攔截

在配置類中重寫 configure(WebSecurity web) 方法,然后直接訪問即可

pom.xml文件

org.springframework.boot

spring-boot-starter-security

org.springframework.boot

spring-boot-starter-web

啟動類文件

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

* @author https://www.cnblogs.com/beixuan/

*/

@SpringBootApplication

public class SecurityApplication {

public static void main(String[] args) {

SpringApplication.run(SecurityApplication.class, args);

}

}

SecurityController 文件

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

* @author https://www.cnblogs.com/beixuan/

*/

@RestController

public class SecurityController {

/**

* 不用登錄就可訪問

* @return

*/

@RequestMapping("/hi")

public String sayHi(){

return "Hi bro!";

}

@RequestMapping("/hello")

public String sayHello(){

return "Hello bro!";

}

}

application.yml 配置文件

spring:

security:

user:

name: beixuan

password: beixuan

SecurityConfig Java配置文件

此方法配置用戶與配置 yml 文件效果一致

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.builders.WebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import org.springframework.security.crypto.password.PasswordEncoder;

/**

* @author https://www.cnblogs.com/beixuan/

*/

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override

public void configure(AuthenticationManagerBuilder auth) throws Exception {

//Spring Security5之后 官方需要密碼強制加密,如不想加密可創建一個過期的 PasswordEncoder 的實例 NoOpPasswordEncoder,但不安全

BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();

String password = bCryptPasswordEncoder.encode("beixuan");

//添加一個用戶[beixuan] 角色為[admin] 密碼是[beixuan加密后的密鑰]

auth.inMemoryAuthentication()

.withUser("beixuan")

.roles("admin")

.password(password);

}

@Bean

PasswordEncoder passwordEncoder(){

return new BCryptPasswordEncoder();

}

}

具體的登錄配置 下面代碼借鑒于 江南一點雨 隨筆的代碼,有興趣可以看看

VerifyCodeFilter 一次性驗證碼,可以查看資料了解其使用方法,這里不再敘述

@Configuration

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired

VerifyCodeFilter verifyCodeFilter;

@Override

protected void configure(HttpSecurity http) throws Exception {

http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class);

http

.authorizeRequests()//開啟登錄配置

.antMatchers("/hello").hasRole("admin")//表示訪問 /hello 這個接口,需要具備 admin 這個角色

.anyRequest().authenticated()//表示剩余的其他接口,登錄之后就能訪問

.and()

.formLogin()

//定義登錄頁面,未登錄時,訪問一個需要登錄之后才能訪問的接口,會自動跳轉到該頁面

.loginPage("/login_p")

//登錄處理接口

.loginProcessingUrl("/doLogin")

//定義登錄時,用戶名的 key,默認為 username

.usernameParameter("uname")

//定義登錄時,用戶密碼的 key,默認為 password

.passwordParameter("passwd")

//登錄成功的處理器

.successHandler(new AuthenticationSuccessHandler() {

@Override

public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException, ServletException {

resp.setContentType("application/json;charset=utf-8");

PrintWriter out = resp.getWriter();

out.write("success");

out.flush();

}

})

.failureHandler(new AuthenticationFailureHandler() {

@Override

public void onAuthenticationFailure(HttpServletRequest req, HttpServletResponse resp, AuthenticationException exception) throws IOException, ServletException {

resp.setContentType("application/json;charset=utf-8");

PrintWriter out = resp.getWriter();

out.write("fail");

out.flush();

}

})

.permitAll()//和表單登錄相關的接口統統都直接通過

.and()

.logout()

.logoutUrl("/logout")

.logoutSuccessHandler(new LogoutSuccessHandler() {

@Override

public void onLogoutSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication authentication) throws IOException, ServletException {

resp.setContentType("application/json;charset=utf-8");

PrintWriter out = resp.getWriter();

out.write("logout success");

out.flush();

}

})

.permitAll()

.and()

.httpBasic()

.and()

.csrf().disable();

}

忽略攔截分兩步

增加訪問路徑/hi

/**

* 不用登錄就可訪問

* @return

*/

@RequestMapping("/hi")

public String sayHi(){

return "Hi bro!";

}

增加配置代碼

@Override

public void configure(WebSecurity web) throws Exception {

web.ignoring().antMatchers("/hi");

}

即可不用登錄訪問/hi路徑

END

本文就先說到這里,有問題歡迎留言討論

總結

以上是生活随笔為你收集整理的java security 详解_Spring Security入门教程 通俗易懂 超详细 【内含案例】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。