JAVA中使⽤MD5加密⼯具类实现对数据的加密处理1.MD5⼯具类
package com.ssm.util;
import java.security.MessageDigest;
public class MD5Util {
//将字节数组转成⼗六进制字符串
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
String();
}
/
/对单个字节转换成整数进⾏取商取余数计算
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
//根据下标d1,d2去数组hexDigits的数据
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest md = Instance("MD5");
if (charsetname == null || "".equals(charsetname))
//将加密之后的字节数据转换成16进制的字符串
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString
.
getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString;
}
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
}
2.在登录注册中使⽤MD5加密算法
demo⽬录结构
数据库⽤户表
CREATE TABLE `user` (
`id` int(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`userName` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '⽤户名',
`password` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
pojo对象User.java
package com.ssm.pojo;
public class User {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.1DAO层
DAO层:DAO层主要是做数据持久层的⼯作,负责与数据库进⾏联络的⼀些任务都封装在此,DAO层的设计⾸先是设计DAO的接⼝,
然后在Spring的配置⽂件中定义此接⼝的实现类,
然后就可在模块中调⽤此接⼝来进⾏数据业务的处理,⽽不⽤关⼼此接⼝的具体实现类是哪个类,显得结构⾮常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置⽂件中进⾏配置。
UserDaO.java
package com.ssm.dao;
import com.ssm.pojo.User;
public interface UserDao {
//⽤户注册
public int register(User user) ;
/
/登陆
public User login(User user);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm.dao.UserDao">
<resultMap type="com.ssm.pojo.User" id="UserResult">
<result property="id" column="id"/>
<result property="userName" column="userName"/>
<result property="password" column="password"/>
</resultMap>
<select id="login" parameterType="com.ssm.pojo.User" resultMap="UserResult">
select * from
user where userName=#{userName} and password=#{password} limit 1
</select>
<insert id="register" parameterType="com.ssm.pojo.User">
insert into user(userName,password)
values(#{userName},#{password})
</insert>
</mapper>
2.2业务层:Service层
Service层:Service层主要负责业务模块的逻辑应⽤设计。
⾸先设计接⼝,再设计其实现的类
接着再在Spring的配置⽂件中配置其实现的关联。这样我们就可以在应⽤中调⽤Service接⼝来进⾏业务处理。
Service层的业务实现,具体要调⽤到已定义的DAO层的接⼝,
封装Service层的业务逻辑有利于通⽤的业务逻辑的独⽴性和重复利⽤性,程序显得⾮常简洁。
UserService.java
package com.ssm.service.impl;
import com.ssm.pojo.User;
public interface UserService {
public User login(User user);
java源代码加密public int register(User user);
}
UserServiceImpl.java
package com.ssm.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.ssm.dao.UserDao;
import com.ssm.pojo.User;
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public User login(User user) {
// TODO Auto-generated method stub
return userDao.login(user);
}
public int register(User user) {
// TODO Auto-generated method stub
ister(user);
}
}
2.3控制层:Controller层
Controller层:Controller层负责具体的业务模块流程的控制,
在此层⾥⾯要调⽤Service层的接⼝来控制业务流程,
控制的配置也同样是在Spring的配置⽂件⾥⾯进⾏,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进⾏抽象归纳,设计出可以重复利⽤的⼦单元流程模块,这样不仅使程序结构变得清晰,也⼤⼤减少了代码量。
RegisterController.java
package ller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.pojo.User;
import com.ssm.service.impl.UserService;
import com.ssm.util.MD5Util;
@Controller
@RequestMapping("user")
public class RegisterController {
@Resource
private UserService userService;
@RequestMapping("/register")
public String register(User user, HttpServletRequest request){
String Parameter("userName");
String Parameter("password");
String Md5password=MD5Util.MD5Encode(password, "UTF-8");
user.setPassword(Md5password);
user.setUserName(username);
int ister(user);
if (result > 0) {
return "index";
} else {
return"register";
}
}
}
LoginController.java
package ller;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.pojo.User;
import com.ssm.service.impl.UserService;
import com.ssm.util.MD5Util;
@Controller
@RequestMapping("user")
public class LoginController {
@Resource
private UserService userService;
@RequestMapping("/login")
public String login(User user,HttpServletRequest request){
String Parameter("userName");
String Parameter("password");
//将登陆提交的密码进⾏MD5加密然后到数据库加密密码进⾏对⽐验证
String Md5password=MD5Util.MD5Encode(password, "UTF-8");
user.setUserName(userName);
user.setPassword(Md5password);
User result=userService.login(user);
if(result==null){
request.setAttribute("errorMsg", "请认真核对账号、密码!");
return "login";
}else{
return "success";
}
}
}
2.4view层(视图层)
View层此层与控制层结合⽐较紧密,需要⼆者结合起来协同⼯发。View层主要负责前台jsp页⾯的表⽰.
login.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<html>
<body>
<form action="${tPath}/user/login" method="post">
<p>⽤户名: <input type="text" name="username" /></p>
<p>密 ;码: <input type="password" name="password" /></p>
<p><input type="submit" value="登陆"/></p>
</form>
<a href="jsp/register.jsp">注册</a>
</body>
</html>
register.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>注册</title>
</head>
<body>
<form action="${tPath}/user/register" method="post">
<p>⽤户名: <input type="text" name="userName" /></p>
<p>密 ;码: <input type="password" name="password" /></p>
<p><input type="submit" value="注册"/></p>
</form>
</body>
</html>
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独⽴进⾏,这样的⼀种模式在开发⼤项⽬的过程中尤其有优势Controller,View层因为耦合度⽐较⾼,因⽽要结合在⼀起开发,但是也可以看作⼀个整体独⽴于前两个层进⾏开发。这样,在层与层之前我们只需要知道接⼝的
定义,调⽤接⼝即可完成所需要的逻辑单元应⽤,⼀切显得⾮常清晰简单。Service逻辑层设计Service层是建⽴在DAO层之上的,建⽴了DAO层后才可以建⽴Service层,⽽Service层⼜是在Controller层之下的,因⽽Service层应该既调⽤DAO层的接⼝,⼜要提供接⼝给Controller层的类来进⾏调⽤,它刚好处于⼀个中间层的位置。每个模型都有⼀个Service接⼝,每个接⼝分别封装各⾃的业务处理⽅法。
3.MD5⼯具类
MD5Util.java
package com.ssm.util;
import java.security.MessageDigest;
public class MD5Util {
//将字节数组转成⼗六进制字符串
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
String();
}
//对单个字节转换成整数进⾏取商取余数计算
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
/
/根据下标d1,d2去数组hexDigits的数据
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest md = Instance("MD5");
if (charsetname == null || "".equals(charsetname))
//将加密之后的字节数据转换成16进制的字符串
resultString = byteArrayToHexString(md.digest(resultString
.getBytes()));
else
resultString = byteArrayToHexString(md.digest(resultString
.getBytes(charsetname)));
} catch (Exception exception) {
}
return resultString;
}
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
}
4.ssm框架的配置⽂件
①数据库配置⽂件
jdbc.properties
sql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmtest?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
#定义初始连接数
initialSize=0
#定义最⼤连接数
maxActive=20
#定义最⼤空闲
maxIdle=20
#定义最⼩空闲
minIdle=1
#定义最长等待时间
maxWait=60000
②log4j配置⽂件
log4j.properties
#定义LOG输出级别
#定义⽇志输出⽬的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活地指定⽇志输出格式,下⾯⼀⾏是指定具体的格式
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
#⽂件⼤⼩到达指定尺⼨的时候产⽣⼀个新的⽂件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出⽬录
log4j.appender.File.File = logs/springmvcMybist/ssm.log
#定义⽂件最⼤⼤⼩
log4j.appender.File.MaxFileSize = 10MB
#输出所以⽇志,如果换成DEBUG表⽰输出DEBUG以上级别⽇志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
③spring-mybatis配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p" xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-4.0.xsd
/schema/context
/schema/context/spring-context-4.0.xsd
/schema/mvc
/schema/mvc/spring-mvc-4.0.xsd">
<!-- ⾃动扫描 -->
<context:component-scan base-package="com.ssm"/>
<!-- 引⼊配置⽂件 -->
<bean id="propertyConfigurer"
class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"/>
</bean>
<bean id="dataSource" class="org.apachemons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<!-- 初始化连接⼤⼩ -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最⼤数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最⼤空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最⼩空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最⼤等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射⽂件 -->
<bean id="sqlSessionFactory" class="batis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- ⾃动扫描l⽂件 -->
<property name="mapperLocations" value="classpath:com/ssm/mapping/*.xml"></property>
</bean>
<!-- DAO接⼝所在包名,Spring会⾃动查其下的类 -->
<bean class="batis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
④spring-mvc配置⽂件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p" xmlns:context="/schema/context"
xmlns:mvc="/schema/mvc"
xsi:schemaLocation="/schema/beans
/schema/beans/spring-beans-4.0.xsd
/schema/context
/schema/context/spring-context-4.0.xsd
/schema/mvc
/schema/mvc/spring-mvc-4.0.xsd">
<!--避免IE执⾏AJAX时,返回JSON出现下载⽂件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.verter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/><!-- JSON转换器 -->
</list>
</property>
</bean>
<!-- 对静态资源的访问 -->
<!-- <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/css/**"
location="/css/" /> -->
<!-- ⾃动扫描该包,使SpringMVC认为包下⽤了@controller注解的类是控制器 -->
<context:component-scan base-package="ller"/>
<!-- 添加注解驱动 -->
<mvc:annotation-driven enable-matrix-variables="true"/>
<!-- 允许对静态资源⽂件的访问 -->
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论