博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展Spring Security-用户密码自定义加密的快速实现
阅读量:4044 次
发布时间:2019-05-24

本文共 1486 字,大约阅读时间需要 4 分钟。

对于使用Acegi框架实现安全的开发人员,都会碰到用户密码加密的需求。数据库中存储的是加密后的密文,用户登录时需将输入的密码加密后在和数据库中的密文密码进行比对。

 

Acegi本身考虑的已经很周到了,提供了3中常用的密码加密方式,分别为Md5,Sha,Plaintext,由3个类分别实现

 

1.Md5PasswordEncoder - Md5方式

2.ShaPasswordEncoder - 哈西方式

3.PlaintextPasswordEncoder - 明文方式

 

使用起来也很简单,只需做简单的配置,例如:

 

 

对于需要自己扩展自定义加密机制的人也很简单,只需要实现Acegi的org.acegisecurity.providers.encoding.PasswordEncoder 接口。其中有两个方法:

 

@实现加密的方法,既将明文转换为密文的方法

public abstract String encodePassword(String rawPass, Object salt)

    throws DataAccessException;

 

@验证密码是否有效的方法,返回'true'则登录成功

public abstract boolean isPasswordValid(String encPass, String rawPass, Object salt)

    throws DataAccessException;

 

例如:

 

public class JitPasswordEncoder implements PasswordEncoder {	public String encodePassword(String rawPass, Object salt)			throws DataAccessException {				NetSignServer netSignServer = new NetSignServer();		String pass = null;		try {			pass = netSignServer.NSHashAndBase64Encode(rawPass);		} catch (IOException e) {			e.printStackTrace();		}		return pass;	}	public boolean isPasswordValid(String encPass, String rawPass, Object salt)			throws DataAccessException {				String pass1 = "" + encPass;		String pass2 = encodePassword(rawPass, salt);		return pass1.equals(pass2);	}}
 

其中encPass是数据库中保存的密码,rawPass是用户输入的密码,salt是生成密码时的种子,这个例子中我未用到。

流程是,当用户登录时,将调用isPasswordValid()方法验证登录凭证,isPasswordValid()方法将会调用encodePassword()方法将用户输入的密码进行加密,然后将数据库中所存密码和输入的加密后的密码进行比对,符合返回'true'则用户登录成功。

 

至此相信你已经掌握了如何实现如何在Acegi中自定义加密密码的方法,至于salt参数的使用有待后续讲解。

 

The end.

 

转载地址:http://nchdi.baihongyu.com/

你可能感兴趣的文章
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
Java的对象驻留
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
如何构建高扩展性网站
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>