众筹网第二天


没有绑定context,直接报错

将斜体去除
注释功能
方案二:使用base标签

登录功能实现

狗日的,阿里云没有相关依赖,只有这一个,让我好辛苦

mysql
mysql-connector-java
5.1.46



后端控制器

在springmvc.xml中配置



必须带有扩展名

记住我功能实现,SpringSecurity可以实现

${requestScope.MESSAGE}
显示消息

建立模型

时序图 Sequence Diagram
15节课直接忽略

密码加密程序代码
使用MD5

package com.pyq.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Md5Util {
//指定加密算法
	public static String md5(String source) {
		String algorithm = "MD5";
		//1.声明一个StringBuilder
		StringBuilder builder = new StringBuilder();
		//准备字符数组
		char[] characters = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		
		//执行加密操作
		try {
			MessageDigest digest = MessageDigest.getInstance(algorithm);
			//将要加密的明文转换成字节数组形式
			byte[] inputBytes = source.getBytes();
			//执行加密操作
			byte[] outputBytes = digest.digest(inputBytes);
			for(int i = 0;i<outputBytes.length;i++) {
				//获取当前字节数值
				byte b = outputBytes[i];
				//获取低四位的值
				int lowValue = b&15;
				//右移四位和15做运算
				int highValue = (b>>4)&15;
				
				//高四位的数值为下标从字符数组中获取对应的字符
				char highCharacter = characters[highValue];
				char lowCharacter = characters[lowValue];
				builder.append(highCharacter).append(lowCharacter);
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return builder.toString();
	}
}

防止空指针异常
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409092550769-701410424.png)
密码加入盐值  进行加密操作
登录功能实现
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409094144425-1458981368.png)
@RequestParam是获取页面内容
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409094330983-1518046422.png)
在service方法中实现代码
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409094557960-556839751.png)
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409095237192-2003962432.png)
```java
@Override
	public Admin login(String loginAcct, String userPswd) {
		
		// 根据loginAcct查询数据库
		AdminExample adminExample = new AdminExample();
		
		adminExample.createCriteria().andLoginAcctEqualTo(loginAcct);
		
		// 执行查询
		List<Admin> list = adminMapper.selectByExample(adminExample);
		
		if(!CrowdFundingUtils.collectionEffective(list)) {
			
			// 如果查询结果集合无效,则直接返回null
			return null;
		}
		
		// 获取唯一集合元素
		Admin admin = list.get(0);
		
		// 确认admin不为null
		if(admin == null) {
			
			return null;
		}
		
		// 比较密码
		String userPswdDataBase = admin.getUserPswd();
		
		String userPswdBroswer = CrowdFundingUtils.md5(userPswd);
		
		if(Objects.equals(userPswdBroswer, userPswdDataBase)) {
			
			// 如果两个密码相等那么说明登录能够成功,返回Admin对象
			return admin;
		}
		
		return null;
	}

![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409095814864-679101332.png)
登录效果总结
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409095851906-1733600682.png)
登录的辅助功能
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409101003117-1689590790.png)
后面直接类名.常量名直接可以使用


###配置异常映射机制 
将异常和捕获的页面对应,捕获到对应类型异常后,跳转到对应的页面
springmvc.xml配置
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409101740467-1518978568.png)
异常处理对象
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409102133717-1012748818.png)
system-error.jsp
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409102244600-102763015.png)
退出功能实现
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409102358399-1009824193.png)
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409102452786-757201086.png)
登录检查拦截器实现,临时使用,后面使用安全框架
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409103445727-1579405182.png)
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409103500432-129639428.png)
![](https://img2020.cnblogs.com/blog/1784046/202004/1784046-20200409103808727-1843451112.png)
posted @ 2020-04-08 13:24  dev-pan  阅读(25)  评论(0)    收藏  举报