1.1.1.1. 管理员登录

思路

  1. 通过管理员名查询密码
  2. 对比表单与数据库的密码
  3. 如果成功返回查询的管理员,否则返回null

 

--页面代码

 

 

 

 

--Controller代码

/**

 * 登录管理员

 * path:${pageContext.request.contextPath }/admin/loginAdmin.do

 * @param entity

 * @return

 */

@RequestMapping(value="/loginAdmin")

public String loginAdmin(@RequestParam Map<String,Object> entity,HttpSession session,HttpServletRequest request) {

logger.debug("管理员登录"+entity);

try {

Map<String, Object> admin = adminService.loginAdmin(entity);

if (admin!=null) {

 

session.setAttribute("admin_info", admin);

return "manager/index";

}

} catch (Exception e) {

e.printStackTrace();

}

request.setAttribute("admin_login_msg", "登录失败,请确认用户密码是否正确");

return "forward:/login.jsp";

 

}

 

--Service代码

/**

 * 管理员登录

 * @param admin

 * @return

 */

Map<String, Object> loginAdmin(Map<String, Object> admin);

--ServiceImpl代码

@Override

public Map<String, Object> loginAdmin(Map<String, Object> admin) {

Object accountName = admin.get("admin_account");

//1.通过账号查询管理员信息

Map<String, Object> resultAdmin = adminMapper.findByAccount(accountName);

//2.验证密码

if (admin.get("admin_pwd").equals(resultAdmin.get("admin_pwd"))) {

return resultAdmin;

}

 

return null;

}

--Mapper代码

/**

 * 通过账号名查询记录

 * @param accountName

 * @return

 */

@Select(value="SELECT * FROM tb_admin  WHERE admin_account = #{accountName}")

Map<String, Object> findByAccount(Object accountName);

 

1.1.1.2. 管理员注销

--navbar.jsp页面代码

 

 

 

--AdminController代码

/**

 * 管理员注销

 * path:${pageContext.request.contextPath }/admin/undoAdmin.do

 * @return

 */

@RequestMapping(value="/undoAdmin")

public String undoAdmin(HttpSession session) {

Object adminInfo = session.getAttribute("admin_info");

if(adminInfo!=null) {

session.removeAttribute("admin_info");

}

 

 

return "forward:/login.jsp";

}

 

1.1.1.3. 管理员修改密码

--跳转到修改密码页面

 

 

--AdminController增加代码

/**

 * 跳转到修改密码页面

 * path:${pageContext.request.contextPath }/admin/toSettingAdmin.do

 * @return

 */

@RequestMapping(value="/toSettingAdmin")

public String toSettingAdmin() {

 

return "manager/setting";

}

 

/**

 * 修改当前用户密码

 * path:${pageContext.request.contextPath }/admin/setAdminPwd.do

 * @param entity

 * @param sesssion

 * @param request

 * @return

 */

@SuppressWarnings("unchecked")

@RequestMapping(value="/setAdminPwd")

public String setAdminPwd(@RequestParam Map<String,Object> entity,HttpSession sesssion,HttpServletRequest request) {

logger.debug("-修改当前登录管理员密码-"+entity);

 

try {

Map<String, Object> admin = (Map<String, Object>) sesssion.getAttribute("admin_info");

//1.获得表单的原密码与当前的登录管理员校验是否正确

if(entity.get("source_admin_pwd").equals(admin.get("admin_pwd"))) {

//2.新的密码与确认密码是否一致

if(entity.get("new_admin_pwd").equals(entity.get("confirm_admin_pwd"))) {

Map<String,Object > params=new HashMap<>();

//根据管理员编号,修改密码

params.put("admin_id", admin.get("admin_id"));

params.put("admin_pwd", entity.get("new_admin_pwd"));

Map<String, Object> resultAdmin = adminService.editAdminPassword(params);

sesssion.setAttribute("admin_info", resultAdmin);

request.setAttribute("admin_edit_password_msg", "修改密码成功");

return "manager/setting";

}else {

request.setAttribute("admin_edit_password_msg", "修改密码失败,确认密码不一致");

}

 

}else {

request.setAttribute("admin_edit_password_msg", "修改密码失败,原密码密码不正确");

}

} catch (Exception e) {

request.setAttribute("admin_edit_password_msg", "修改密码失败,出现未知异常,请联系管理员");

e.printStackTrace();

}

 

 

return "manager/setting";

}

 

--AdminService增加代码

/**

 * 修改管理员密码

 * 如果修改成功返回,更新后的管理员

 * 如果修改失败,返回null

 * @param admin  传入的参数必须只能是:admin_pwd 和 admin_id,不能包括其他参数

 * @return 返回修改后的管理员信息

 */

Map<String, Object> editAdminPassword(Map<String, Object> admin);

 

--AdminServiceImpl增加密码

@Override

public Map<String, Object> editAdminPassword(Map<String, Object> admin) {

//注意事项:传入的参数必须只能有,admin_id和admin_pwd

int count = adminMapper.updateForNotnull(admin);

if (count>0) {

//2.如果更新成功,通过admin_id,返回更新后的数据

return adminMapper.findById(admin.get("admin_id"));

 

}

return null;

}

 

--AdminMapper增加代码

/**

 * 更新非空的字段

 * @param entity

 * @return

 */

@UpdateProvider(type=AdminProvider.class,method="updateForNotnull")

int updateForNotnull(Map<String, Object> entity);

 

--AdminProvider增加代码

public String updateForNotnull(Map<String, Object> entity) {

String sql = "UPDATE tb_admin SET ";

StringBuilder builder = new StringBuilder(sql);

if (entity.get("admin_name") != null) {

builder.append("admin_name=#{admin_name},");

}

if (entity.get("admin_account") != null) {

builder.append("admin_account=#{admin_account},");

}

 

if (entity.get("admin_pwd") != null) {

builder.append("admin_pwd=#{admin_pwd},");

}

 

if (entity.get("admin_status") != null) {

builder.append("admin_status=#{admin_status},");

}

 

if (entity.get("role_id") != null) {

builder.append("role_id=#{role_id},");

}

builder.delete(builder.length() - 1, builder.length());

builder.append("WHERE admin_id=#{admin_id}");

logger.debug("管理员更新:"+builder.toString());

return builder.toString();

}

 

1.1.1.4. md5校验支持

--创建一个MD5加密帮助类

package cn.lxm.edu.utils;

 

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.Base64;

import java.util.Base64.Encoder;

 

public class Md5Utils {

 

private static final String salt="Pwetio!WEW345";

 

/**

 * 将密码Md5加密

 * @param source

 * @return

 */

public static String md5(String source) {

 

 

try {

//1.获得摘要对象

MessageDigest digest = MessageDigest.getInstance("MD5");

//2.返回的是密文的字节码,转成字符串是乱码

source=source+salt;

byte[] result = digest.digest(source.getBytes());

//3.为了避免存储的是乱码,可以使用base64让输出的字符串不是乱码

Encoder encoder = Base64.getEncoder();

return encoder.encodeToString(result);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

return null;

}

 

public static void main(String[] args) {

 System.out.println(md5("123456"));

}

}

 

--修改登录加入md5校验

 

 

--修改密码加入md5校验