亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Spring security實現對賬戶進行加密

瀏覽:60日期:2023-09-17 17:19:00

一、原理分析1.1加密原理

首先前端頁面發送注冊的賬戶信息到controller層,然后依次經過service層和dao層,最后入庫。其中對密碼的加密應該放在service層進行,加密后再入庫。

spring security中有一個加密類BCryptPasswordEncoder可以用來對密碼進行加密,調用其中的encode方法返回一個加密后的字符串

public String encode(CharSequence rawPassword) { String salt; if (strength > 0) { if (random != null) {salt = BCrypt.gensalt(strength, random); } else {salt = BCrypt.gensalt(strength); } } else { salt = BCrypt.gensalt(); } return BCrypt.hashpw(rawPassword.toString(), salt);}

使用時可以在spring的配置文件中配置一個加密類的bean,這樣在service中可以直接注入

加密后數據庫中存儲的是加密過后的字符串。

1.2加密后的登錄過程

對密碼進行加密后數據庫中存儲的是加密字符串,用戶發起登錄請求后,框架會使用相同的加密算法對前端傳遞的密碼進行加密并得到加密字符串,然后和數據庫中查詢到的字符串進行對比。

二、代碼實現

具體的工程代碼可以參考我的工程示例,下文中只給出了和添加用戶相關的部分。

在配置文件中配置加密類

<bean class='org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder'> </bean>

2.1添加用戶的頁面如下, register.html

<html> <head> <meta charset='UTF-8'> <title>注冊頁面</title> </head> <body> <form action='/user/add.do' method='post'> 用戶名:<input type='text' name='username' placeholder='請輸入用戶名'><br> 密 碼:<input type='password' name='password' placeholder='請輸入密碼'><br> <input type='submit' value='注冊'> </form> </body></html>

2.2controller層創建一個增加用戶的方法

@RestController@RequestMapping('/user')public class UserController { @Autowired private IUserService userService; @PostMapping('/add') public String add(UserInfo userInfo){ userService.add(userInfo); return 'success'; }}

2.3service層

@Autowiredprivate BCryptPasswordEncoder passwordEncoder;...//省略其他@Overridepublic void add(UserInfo userInfo) { //對密碼加密 userInfo.setPassword(passwordEncoder.encode(userInfo.getPassword())); userDao.add(userInfo);}

這里的passwordEncoder就是在配置文件中配置的加密bean,注入后可以直接使用

dao層這里就不再列舉了。

三、測試

啟動工程并成功登錄后,跳轉到首頁,

Spring security實現對賬戶進行加密

選擇注冊新賬號后跳轉到注冊頁面

Spring security實現對賬戶進行加密

輸入賬戶和密碼后注冊,會在數據庫中插入一條新的記錄。

Spring security實現對賬戶進行加密

這里我頁面上輸入的是 admin/admin,數據庫中存儲的password是加密后的

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

四、用加密后的賬號登錄

此時如果使用剛剛新建的這個賬號進行登錄就會登錄失敗。因為我們并沒有配置spring security認證時的加密方式,默認是不進行加密,所以會直接將前臺輸入的密碼和數據庫中的加密字符串進行比較。

要使用這個賬號登錄還需要進行如下配置

在spring security的配置文件中配置加密策略

<security:authentication-manager> <!--配置使用給定的userservice完成認證--> <security:authentication-provider user-service-ref='userService'> <security:password-encoder ref='passwordEncoder'/> </security:authentication-provider> </security:authentication-manager> <bean class='org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder'> </bean>

在userService的loadUserByUsername方法中去除密碼字符串上拼接的{noop}字符串,本來這個就是為了適配密碼未加密的情況

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserInfo userInfo = userDao.findByUsername(username); User user=new User(userInfo.getUsername(),userInfo.getPassword(),getRoles()); return user;}

然后使用剛才注冊的 admin/admin就可以登錄成功了。

注意如果進行了上面兩部,數據庫中以前的賬戶將不能進行登錄了,因為數據庫中的密碼是沒有加密的,而框架會對前臺傳遞的密碼進行加密后再和數據庫中的比較。所以一定要記住上面新注冊的這個賬號admin/admin

這里我給出admin對應的加密字符串

$2a$10$URSaaafrPOCjFYvhrhQbku2/l36IJ0zH0G8xeJzf5lAH2F1JJ1ybG

如果大家忘記了剛才注冊的賬號,可以在數據庫中插入一條admin/admin的記錄。

五、總結

添加賬戶主要是需要用spring security自帶的加密類BCryptPasswordEncoder對用戶密碼進行加密。

要使用新注冊的賬戶登錄就需要在配置文件中配置加密策略

配置后原來的賬號因為密碼沒有加密將不能使用

六、示例工程源碼

示例工程已經上傳到碼云上,如果有需要歡迎大家參考

示例工程

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 久久久久久网站 | xxxxxx国产精品视频 | 久久国产自偷自免费一区100 | 国内自拍视频在线看免费观看 | 搡的我好爽视频在线观看 | 激情六月丁香婷婷 | 欧美视频在线免费播放 | 国产精品高清视亚洲精品 | 国产毛片网 | 成人久久在线 | 久久青草免费91线频观看不卡 | 国产大尺度吃奶无遮无挡网 | 麻豆网站视频国产在线观看 | 久久99精品久久久久久秒播放器 | 国产精品麻豆99久久 | 97色伦色在线综合视频 | 国产亚洲精品美女 | 在线观看自拍视频 | 看免费黄色一级视频 | 国产精品久久久久免费 | free 性欧美69hd | 8mav模特福利视频在线观看 | 日韩特级毛片免费观看视频 | 久久免费国产精品一区二区 | 色y视频 | 欧美aaa级片 | 亚洲欧美国产五月天综合 | 欧美一级视频在线高清观看 | 久久国产免费福利资源网站 | a级毛片免费全部播放 | 精品大臿蕉视频在线观看 | 欧美三级成人 | 亚洲欧美在线看 | 五月天六月婷婷开心激情 | 国产免费久久精品99久久 | 91精品一区二区三区在线观看 | 99久久久国产精品免费牛牛四川 | 看片免费黄 | 亚洲人成s大片在线播放 | 欧美一区二区三区免费播放 | 中国护士一级毛片免费版本 |