[本系列文章是博主的学习笔记,而非经典教程,特此说明]
在前面的文章中,我们在数据库中使用明文存储了用户名密码等敏感信息,这在我们开放的网络环境。一旦账号密码泄露,这对于客户的损失将是不可估量的。因此我们有必要来学习一下常用的安全性较好的加密/解密算法。另外,在下文中,我们仅仅举例如何使用加密解密,而不会探讨加密算法本身的设计与实现,感兴趣的读者请自行查阅相关资料。
准备工作:
a.操作系统:win7 x64
b.开发工具:myeclipse 2014,jdk1.7,maven3.3.3,mysql5.0,jsp基础
------------------------------------------------------------------------------------------------------------------------------------------------------
正文开始:
1.我们创建shiro08工程,我们可以直接从shiro07工程中复制过来,具体目录结构如下图所示:
2.创建CryptographyUtil.java文件,具体内容如下:(这里仅举例部分方法,更多内容请参考官方文档)
package com.java.util;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.hash.Md5Hash;
/**
* @author 作者 E-mail:
* @version 创建时间:2016年2月16日上午9:58:01 类说明
*/
public class CryptographyUtil {
public static String encBase64(String str) {
return Base64.encodeToString(str.getBytes());
}
public static String decBase64(String str){
return Base64.decodeToString(str);
}
public static String md5(String str,String salt){
return new Md5Hash(str,salt).toString();
}
public static void main(String[] args) {
String password="1234";
System.out.println(CryptographyUtil.encBase64(password));
System.out.println(CryptographyUtil.decBase64("MTIzNA=="));
System.out.println(CryptographyUtil.md5(password, "java"));
}
}
为方便后续内容,这里请读者先通过单元测试内容。
3.将数据库中的密码修改为md5加密之后的字符串。(假设salt为“java”,与下面代码保持一致即可)
4.修改LoginServlet.java文件中读取用户数据的方式,具体内容如下:
package shiro05;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import com.java.util.CryptographyUtil;
/**
*@author 作者 E-mail:
*@version 创建时间:2016年2月16日下午4:24:21
*类说明
*/
public class LoginServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.o