spring 安全编码

在以前的文章中,我们深入探讨了Spring安全性。 我们实现了由jdbc支持的安全性,基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息。

通过足够小心,我们会发现密码为纯文本格式。 尽管这在实际环境中可以很好地用于示例目的,但密码始终会进行编码并存储在数据库中。

Spring Security以一种非常方便的方式支持密码编码。 它带有自己的预配置密码编码器,但是它也使我们能够创建自定义密码编码器。

SpringPassword安全附带有一些密码编码器,例如StandardPasswordEncoder,Md5PasswordEncoder和流行的BCryptPasswordEncoder。

package com.gkatzioura.spring.security;import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.StandardPasswordEncoder;/*** Created by gkatzioura on 10/5/16.*/
public class EncoderTest {private static final Logger LOGGER = LoggerFactory.getLogger(EncoderTest.class);@Testpublic void md5Encoder() {Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();String encoded = md5PasswordEncoder.encodePassword("test_pass",null);LOGGER.info("Md5 encoded "+encoded);}@Testpublic void bcryptEncoder() {BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();String encoded = bCryptPasswordEncoder.encode("test_pass");LOGGER.info("Becrypt encoded "+encoded);}@Testpublic void standardEncoder() {StandardPasswordEncoder standardPasswordEncoder = new StandardPasswordEncoder();String encoded = standardPasswordEncoder.encode("test_pass");LOGGER.info("Standard encoded "+encoded);}}

要添加密码编码,我们要做的就是在spring配置中设置密码编码器。

使用jdbc支持的spring安全配置,这非常容易,我们只需设置我们选择的密码编码器即可。 在本例中,我们将使用md5密码编码器。

package com.gkatzioura.spring.security.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;import javax.sql.DataSource;/*** Created by gkatzioura on 10/5/16.*/
@EnableWebSecurity
@Profile("encodedjdbcpassword")
public class PasswordEncodedSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate DataSource dataSource;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(new Md5PasswordEncoder()).usersByUsernameQuery("SELECT username,password,1 FROM Custom_Users_Encoded_pass where username=?").authoritiesByUsernameQuery("SELECT username,authority FROM Custom_Roles where username=?");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/public").permitAll().anyRequest().authenticated().and().formLogin().permitAll().and().logout().permitAll();}}

然后,我们将使用编码后的密码将用户添加到数据库。

drop table if exists Custom_Users_Encoded_pass;
create table Custom_Users_Encoded_pass(id bigint auto_increment, username varchar(255), password varchar(255));
-- real password is test_pass
insert into Custom_Users_Encoded_pass(username,password) values('TestUser','4ac1b63dca561d274c6055ebf3ed97db');

因此,通过尝试访问http:// localhost:8080 / secured,必须在登录提示中提供用户名TestUser和密码test_pass。

最后但并非最不重要的一点是,我们将必须更改gradle.build,以将encodejdbcpassword设置为默认配置文件。

bootRun {systemProperty "spring.profiles.active", "encodedjdbcpassword"
}

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2016/10/spring-security-password-encoding.html

spring 安全编码

spring 安全编码_Spring安全性和密码编码相关推荐

  1. Spring安全性和密码编码

    在以前的文章中,我们深入探讨了Spring安全性. 我们实现了由jdbc支持的安全性,基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息. 通过足够小心,我们会发现密码为纯文本格式 ...

  2. Spring Security和自定义密码编码

    在上一篇文章中,我们使用jdbc和md5密码编码将密码编码添加到了我们的spring安全配置中. 但是,在定制UserDetailsS​​ervices的情况下,我们需要对安全配置进行一些调整. 我们 ...

  3. CTF常见密码编码合集

    ASCII编码 简述:使用制定的7位或8位二进制数组合来表示128或256种可能的字符.使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9.标点符号,以及在美式英语中使用的 ...

  4. 04_《计算机安全原理与实践》密码编码工具(下)

    04_<计算机安全原理与实践>密码编码工具(下)含本章理论性习题解答 前言 本专栏上一篇博文介绍了消息认证的机理和非对称加密体系,从实际应用角度,二者是不可分割的.本章将在上一章的基础上进 ...

  5. php 数据库编码,php怎么设置数据库编码方式

    在php中,可以使用mysql_query()函数来设置mysql数据库的编码方式:具体方法:在mysql_connect()语句之后添加"mysql_query("set nam ...

  6. BCrypt加密怎么存入数据库_Spring Boot 中密码加密的两种姿势

    1.为什么要加密 2.加密方案 3.实践3.1 codec 加密3.2 BCryptPasswordEncoder 加密 4.源码浅析 先说一句:密码是无法解密的.大家也不要再问松哥微人事项目中的密码 ...

  7. java spring mvc 实例_spring mvc 简单实例

    转至:http://blog.csdn.net/dingx/article/details/2242105 Spring Framework可以被使用在很多场合之中,考虑到目前大多数Java EE的项 ...

  8. java url安全的base64编码_URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  9. python编码问题无法复现_Python编码问题详解

    1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...

最新文章

  1. 旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图
  2. 误差向量幅度(EVM)介绍
  3. 洛谷 - P3899 [湖南集训]谈笑风生(dfs序+主席树/二维数点)
  4. redis集群关闭 启动报错_使用虚拟机搭建 Redis 集群,实现数据库的负载均衡功能。...
  5. 【转】MySQL日期函数与日期转换格式化函数大全
  6. OpenTSDB 开发指南之 查询数据
  7. C++中dynamic_cast的简介
  8. prototype 1.3.1 跟 ajax冲突!!!莫名其妙!
  9. spring boot 整合 mybatis
  10. 到底图啥?百度工程师非法控制155台服务器“挖矿”,被判刑3年
  11. 使用 nginx 搭建简易文件服务器
  12. VMware安装CentOS过程(初学linux)
  13. [转]给新同学的礼仪建议
  14. 伯努利试验及概率方程 二项式分布 期望值与方差
  15. 华为云 如何使用华为云提供的Ubuntu镜像源
  16. golang中channal容量的问题
  17. hashMap的遍历方式
  18. 国产ARM核心工控主板介绍
  19. 【MATLAB】读取和写入文本文件
  20. 台式电脑怎么锁定该计算机,教大家电脑整个键盘锁了怎么办

热门文章

  1. P4852-yyf hates choukapai【单调队列优化dp】
  2. nssl1320,jzoj(初中)2108-买装备【dfs,水题】
  3. 洛谷P1346-电车【日常图论,最短路,SPFA】
  4. ssl1614-医院设置【图论,最短路】
  5. 洛谷P1373 小a和uim之大逃离 动态规划
  6. 13、字符集和字符编码
  7. 三年半Java后端面试经历
  8. 浅析神经网络为什么能够无限逼近任意连续函数
  9. Spring思维导图,让Spring不再难懂(ioc篇)
  10. 为什么要有周考?周考是用来干什么的?