聚星Note04 - 管理员登录

  • 1 整合静态资源
    • 1.1 关联登录请求地址和视图
    • 1.2 维护项目所需常量类
    • 1.3 小技巧 - idea 正常显示子包
    • 1.4 修饰 system-error.jsp
  • 2 登录与注销
    • 2.1 登录与重定向到主页面
      • 2.1.1 创建 md5 加密工具方法
      • 2.1.2 创建登录自定义异常
      • 2.1.3 处理登录失败异常
      • 2.1.4 登录逻辑实现
    • 2.2 注销
    • 2.3 抽取后台页面公共部分
  • 3 配置资源拦截器
    • 3.1 创建拦截器
    • 3.2 注册拦截器

1 整合静态资源

将静态资源(bootstrap、css、fonts、img、jquery、script、ztree、layer)加入到 gatherStars-admin-webui/src/main/webapp 目录

1.1 关联登录请求地址和视图

  1. 创建 WEB-INF/admin-login.jsp
  2. spring-web-mvc.xml 配置view-controller
<!-- 关联请求地址和视图,免写handle方法 -->
<mvc:view-controller path="/admin/to/login/page.html" view-name="admin-login" />
  1. 浏览器访问 http://localhost:8080/admin/to/login/page.html

1.2 维护项目所需常量类

创建 gatherStars-admin-util/src/main/java/com.turling.gatherStars.constant.ProjectConstant
为项目所需常量, 提供统一入口

public class ProjectConstant {public static final String MESSAGE_LOGIN_FAILED = "抱歉!账号密码错误!请重新输入!";public static final String MESSAGE_LOGIN_ACCT_ALREADY_IN_USE = "抱歉!该账号已被使用!";public static final String MESSAGE_ACCESS_FORBIDEN = "请登录后访问!";public static final String MESSAGE_STRING_INVALIDATE = "请检测到您没有输入有效数据!";public static final String ATTR_NAME_EXCEPTION = "exception";
}

修改 gatherStars-admin-component/src/main/java/com.turling.gatherStars.mvc.config.GatherStarsExceptionResolver

modelAndView.addObject(ProjectConstant.ATTR_NAME_EXCEPTION, exception);

1.3 小技巧 - idea 正常显示子包

点击项目上方齿轮 – 取消勾选 Hide Empty Middle Packages

1.4 修饰 system-error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="keys" content=""><meta name="author" content=""><base href="http://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/" /><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="css/font-awesome.min.css"><link rel="stylesheet" href="css/login.css"><script type="text/javascript" src="jquery/jquery-2.1.1.min.js"></script><script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script><script type="text/javascript">$(function(){$("button").click(function(){// 相当于浏览器的后退按钮window.history.back();});});</script></head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><div class="container"><div class="navbar-header"><div><a class="navbar-brand" href="index.html" style="font-size: 32px;">聚星-创意产品众筹平台</a></div></div></div>
</nav><div class="container"><h2 class="form-signin-heading" style="text-align: center;"><i class="glyphicon glyphicon-log-in"></i> 哎呀!系统出错了!</h2><!-- requestScope.exception.message相当于exception.getMessage() --><h3 style="text-align: center;">${requestScope.exception.message }</h3><button style="width: 150px;margin: 50px auto 0px auto;" class="btn btn-lg btn-success btn-block">点我返回上一步</button>
</div>
</body>
</html>

2 登录与注销

2.1 登录与重定向到主页面

2.1.1 创建 md5 加密工具方法

com.turling.gatherStars.util.GatherStarsUtil 中添加

public static String md5 (String source) {// 1. 判断 source 是否有效if (source == null || source.length() == 0) {// 触发异常处理机制throw new RuntimeException(ProjectConstant.MESSAGE_STRING_INVALIDATE);}try {// 2. 获取 MessageDigest 对象String algorithm = "md5";MessageDigest messageDigest = MessageDigest.getInstance(algorithm);// 3. 获取明文字符串对应的字节数组byte[] input = source.getBytes();// 4. 执行加密byte[] output = messageDigest.digest(input);// 5. 创建 BigInteger 对象int signum = 1;  // 1 表示为整数BigInteger bigInteger = new BigInteger(signum, output);// 6. 按照16进制将 bigInteger 转化为字符int radix = 16;String encode = bigInteger.toString(radix).toUpperCase();return encode;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;
}

2.1.2 创建登录自定义异常

创建 com.turling.gatherStars.exception.LoginFailedException

public class LoginFailedException extends RuntimeException{private static final long serialVersionUID = 1L;public LoginFailedException() {super();}public LoginFailedException(String message) {super(message);}
}

2.1.3 处理登录失败异常

  1. com.turling.gatherStars.mvc.config.GatherStarsExceptionResolver 添加异常处理
@ExceptionHandler(value = LoginFailedException.class)
public ModelAndView resolveLoginFailedException(LoginFailedException exception, HttpServletRequest request,HttpServletResponse response) throws IOException{String viewName = "admin-login";return commonResolve(viewName, exception, request, response);
}
  1. admin-login.jsp 添加错误信息反馈
// <h2 ... ></i> 管理员登录</h2> 标签后添加
<p>${ requestScope.exception.message }</p>

2.1.4 登录逻辑实现

  1. spring-web-mvc.xml 配置view-controller
<mvc:view-controller path="/admin/to/main/page.html" view-name="admin-main" />
  1. 新建 com.turling.gatherStars.mvc.handler.AdminHandler
@Controller
public class AdminHandler {@Autowiredprivate AdminService adminService;@RequestMapping("/admin/do/login.html")public String doLogin(@RequestParam("loginAcct") String loginAcct,@RequestParam("userPswd") String userPswd,HttpSession session) {// 返回 admin 对象说明登录成功,否则抛出异常Admin admin = adminService.getAdminByLoginAcct(loginAcct, userPswd);// 将登录成功返回的 admin 对象存入 Session 域session.setAttribute(ProjectConstant.ATTR_NAME_LOGIN_ADMIN, admin);return "redirect:/admin/to/main/page.html";}
}
  1. com.turling.gatherStars.service.api.AdminService 添加
Admin getAdminByLoginAcct(String loginAcct, String userPswd);
  1. com.turling.gatherStars.service.impl.AdminServiceImpl 添加
public Admin getAdminByLoginAcct(String loginAcct, String userPswd) {// 1. 根据账号密码查询 Admin 对象AdminExample adminExample = new AdminExample();AdminExample.Criteria criteria = adminExample.createCriteria();// 封装查询条件criteria.andLoginAcctEqualTo(loginAcct);// 调用查询方法List<Admin> adminList = adminMapper.selectByExample(adminExample);// 2. 判断 adminList 对象是否为空if (adminList == null || adminList.size() == 0) {// 抛出异常throw new LoginFailedException(ProjectConstant.MESSAGE_LOGIN_FAILED);}Admin admin = adminList.get(0);if (adminList.get(0) == null) {throw new LoginFailedException(ProjectConstant.MESSAGE_LOGIN_FAILED);}// 3. 取出 admin 对象中的密码String userPswdByExample = admin.getUserPswd();// 4. 将表单提交的明文密码进行加密String passwordByForm = GatherStarsUtil.md5(userPswd);// 5. 与数据库密码进行比较if (userPswdByExample != null && userPswdByExample.equals(passwordByForm)) {return admin;} else {throw new LoginFailedException(ProjectConstant.MESSAGE_LOGIN_FAILED);}
}

2.2 注销

  1. com.turling.gatherStars.mvc.handler.AdminHandler 添加
@RequestMapping("/admin/do/logout.html")
public String doLogout(HttpSession session) {// 强制 session 失效session.invalidate();return "redirect:/admin/to/login/page.html";
}
  1. 修改 admin-main.jsp 中的注销超链接
<li><a href="/admin/do/logout.html"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li>

2.3 抽取后台页面公共部分

  1. 新建 WEB-INF/include-head.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="author" content=""><title>聚星</title><base href="http://${pageContext.request.serverName }:${pageContext.request.serverPort }${pageContext.request.contextPath }/"/><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="css/font-awesome.min.css"><link rel="stylesheet" href="css/main.css"><style>.tree li {list-style-type: none;cursor:pointer;}.tree-closed {height : 40px;}.tree-expanded {height : auto;}</style><script src="jquery/jquery-2.1.1.min.js"></script><script src="bootstrap/js/bootstrap.min.js"></script><script src="script/docs.min.js"></script><script type="text/javascript" src="layer/layer.js"></script><script type="text/javascript">$(function () {$(".list-group-item").click(function(){if ( $(this).find("ul") ) {$(this).toggleClass("tree-closed");if ( $(this).hasClass("tree-closed") ) {$("ul", this).hide("fast");} else {$("ul", this).show("fast");}}});});</script>
</head>
  1. 新建 WEB-INF/include-nav.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><div class="container-fluid"><div class="navbar-header"><div><a class="navbar-brand" style="font-size:32px;" href="#">众筹平台 - 控制面板</a></div></div><div id="navbar" class="navbar-collapse collapse"><ul class="nav navbar-nav navbar-right"><li style="padding-top:8px;"><div class="btn-group"><button type="button" class="btn btn-default btn-success dropdown-toggle" data-toggle="dropdown"><i class="glyphicon glyphicon-user"></i> ${ sessionScope.loginAdmin.userName} <span class="caret"></span></button><ul class="dropdown-menu" role="menu"><li><a href="#"><i class="glyphicon glyphicon-cog"></i> 个人设置</a></li><li><a href="#"><i class="glyphicon glyphicon-comment"></i> 消息</a></li><li class="divider"></li><li><a href="/admin/do/logout.html"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li></ul></div></li><li style="margin-left:10px;padding-top:8px;"><button type="button" class="btn btn-default btn-danger"><span class="glyphicon glyphicon-question-sign"></span> 帮助</button></li></ul><form class="navbar-form navbar-right"><input type="text" class="form-control" placeholder="查询"></form></div></div>
</nav>
  1. 新建 WEB-INF/include-sidebar.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<div class="col-sm-3 col-md-2 sidebar"><div class="tree"><ul style="padding-left:0px;" class="list-group"><li class="list-group-item tree-closed" ><a href="main.html"><i class="glyphicon glyphicon-dashboard"></i> 控制面板</a></li><li class="list-group-item tree-closed"><span><i class="glyphicon glyphicon glyphicon-tasks"></i> 权限管理 <span class="badge" style="float:right">3</span></span><ul style="margin-top:10px;display:none;"><li style="height:30px;"><a href="user.html"><i class="glyphicon glyphicon-user"></i> 用户维护</a></li><li style="height:30px;"><a href="role.html"><i class="glyphicon glyphicon-king"></i> 角色维护</a></li><li style="height:30px;"><a href="permission.html"><i class="glyphicon glyphicon-lock"></i> 菜单维护</a></li></ul></li><li class="list-group-item tree-closed"><span><i class="glyphicon glyphicon-ok"></i> 业务审核 <span class="badge" style="float:right">3</span></span><ul style="margin-top:10px;display:none;"><li style="height:30px;"><a href="auth_cert.html"><i class="glyphicon glyphicon-check"></i> 实名认证审核</a></li><li style="height:30px;"><a href="auth_adv.html"><i class="glyphicon glyphicon-check"></i> 广告审核</a></li><li style="height:30px;"><a href="auth_project.html"><i class="glyphicon glyphicon-check"></i> 项目审核</a></li></ul></li><li class="list-group-item tree-closed"><span><i class="glyphicon glyphicon-th-large"></i> 业务管理 <span class="badge" style="float:right">7</span></span><ul style="margin-top:10px;display:none;"><li style="height:30px;"><a href="cert.html"><i class="glyphicon glyphicon-picture"></i> 资质维护</a></li><li style="height:30px;"><a href="type.html"><i class="glyphicon glyphicon-equalizer"></i> 分类管理</a></li><li style="height:30px;"><a href="process.html"><i class="glyphicon glyphicon-random"></i> 流程管理</a></li><li style="height:30px;"><a href="advertisement.html"><i class="glyphicon glyphicon-hdd"></i> 广告管理</a></li><li style="height:30px;"><a href="message.html"><i class="glyphicon glyphicon-comment"></i> 消息模板</a></li><li style="height:30px;"><a href="project_type.html"><i class="glyphicon glyphicon-list"></i> 项目分类</a></li><li style="height:30px;"><a href="tag.html"><i class="glyphicon glyphicon-tags"></i> 项目标签</a></li></ul></li><li class="list-group-item tree-closed" ><a href="param.html"><i class="glyphicon glyphicon-list-alt"></i> 参数管理</a></li></ul></div>
</div>
  1. 修改后的 admin-main.jsp 为
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="zh-CN">
<%@include file="include-head.jsp" %>
<body><%@include file="include-nav.jsp"%><div class="container-fluid"><div class="row"><%@include file="include-sidebar.jsp"%><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h1 class="page-header">控制面板</h1><div class="row placeholders"><div class="col-xs-6 col-sm-3 placeholder"><img data-src="holder.js/200x200/auto/sky" class="img-responsive" alt="Generic placeholder thumbnail"><h4>Label</h4><span class="text-muted">Something else</span></div><div class="col-xs-6 col-sm-3 placeholder"><img data-src="holder.js/200x200/auto/vine" class="img-responsive" alt="Generic placeholder thumbnail"><h4>Label</h4><span class="text-muted">Something else</span></div><div class="col-xs-6 col-sm-3 placeholder"><img data-src="holder.js/200x200/auto/sky" class="img-responsive" alt="Generic placeholder thumbnail"><h4>Label</h4><span class="text-muted">Something else</span></div><div class="col-xs-6 col-sm-3 placeholder"><img data-src="holder.js/200x200/auto/vine" class="img-responsive" alt="Generic placeholder thumbnail"><h4>Label</h4><span class="text-muted">Something else</span></div></div></div></div>
</div></body>
</html>

3 配置资源拦截器

3.1 创建拦截器

  1. gatherStars-admin-component 工程下创建拦截器
    com.turling.gatherStars.mvc.interceptor.LoginInterceptor
public class LoginInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 1. 通过 request 对象获取 Session 对象HttpSession session = request.getSession();// 2. 尝试从 Session 域中获取 Admin 对象Admin admin = (Admin) session.getAttribute(ProjectConstant.ATTR_NAME_LOGIN_ADMIN);// 3. 判断 admin 对象是否为空if(admin == null) {throw new AccessForbiddenException(ProjectConstant.MESSAGE_ACCESS_FORBIDEN);}return true;}
}
  1. gatherStars-admin-util 工程下创建登录异常
    com.turling.gatherStars.exception.AccessForbiddenException
public class AccessForbiddenException extends RuntimeException{public AccessForbiddenException() {super();}public AccessForbiddenException(String message) {super(message);}
}

3.2 注册拦截器

spring-web-mvc.xml 中添加

<mvc:interceptors><mvc:interceptor><!-- 配置拦截受保护的资源 --><!-- /* 一层路径; /** 对应多层路径; --><mvc:mapping path="/**"/><!-- 配置公共资源 --><mvc:exclude-mapping path="/admin/to/login/page.html"/><mvc:exclude-mapping path="/admin/do/login.html"/><!-- 配置拦截器类 --><bean class="com.turling.gatherStars.mvc.interceptor.LoginInterceptor"/></mvc:interceptor>
</mvc:interceptors>

聚星Note04 - 管理员登录相关推荐

  1. Oracle 数据库设置最大进程数参数方法,oracle最大进程数满了处理方法,sysdba管理员登录报“maximum number of processes (150) exceeded“问题解决

    oracle 数据库使用 sysdba 管理员登录报: ORA-00020: maximum number of processes (150) exceeded 译:超过了最大进程数(150) 方法 ...

  2. BCrypt管理员登录密码验证

    一.简单入门测试 BCrypt不支持反运算,只支持密码校验 package com.william.test;import org.springframework.security.crypto.bc ...

  3. java管理员登录_idea实现管理员登录javaweb

    mysql创建db_0106数据库, 创建表 添加一条数据,id int自增,密码:为MD5加密 insert into tb_sys values(null,admin,MD5(123)," ...

  4. 管理员用户不同身份登录页面代码PHP,wordpress管理员登录和普通用户登录后跳转到不同页面-♚付涛纪实阁♚...

    这篇文章将向您展示WordPress用户登录后如何重定向到指定页面或者文章的技巧. 一.重定向到网站管理面板. 将以下代码添加到您的当前主题的 functions.php 文件中 二.重定向到指定页面 ...

  5. day02【后台】管理员登录

    day02[后台]管理员登录 1.创建常量类 创建常量类,用于管理整个系统中所用到的常量 public class CrowdConstant {public static final String ...

  6. 后台userlist.php,后台用户管理(管理员登录后管理会员)

    [预备知识] 一.PHP访问MySQL数据库 1.连接到MySQL数据库 $conn=mysql_connect("localhost","root",&quo ...

  7. java linux root权限管理_Linux--开启root用户并允许管理员登录

    用惯windows的朋友都会觉得执行每一个操作都很简单,但装完linux的话可不是如此,可能你会以为你刚装完linux后用事先设置好的用户名和密码登录,你就是管理员的身份了,但其实你跟普通用户一样,执 ...

  8. Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)

    Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...

  9. Java学生信息管理系统——管理员登录模块(简单易上手)

    前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...

最新文章

  1. python int函数详解_Python内置函数OCT详解
  2. java mvc 分页查询条件_java分页条件查询-GridManager.js表格插件+Pageable分页对象+mybatis pagehelper分页插件...
  3. python制作训练集_利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试
  4. wireshrk中的名词说明
  5. 传统公司部署OpenStack(t版)简易介绍(二)——Keystone组件部署
  6. no java virtual machine was found after searching Failed to load the JNI shared library
  7. 注意!在subList生成子列表之后,一定不要随便更改原列表
  8. python .py文件变为.so文件进行加密
  9. python调用cmd执行命令_详解python调用cmd命令三种方法
  10. 怎么接入WAPI网络防止被蹭网
  11. gwas snp 和_【交流】关于SNP与GWAS(Genome Wide Association study)的一些想法
  12. js获取本周日期和上周日期
  13. css3效果隔两秒旋转然后停两秒再继续旋转,无限循环
  14. win7计算机名怎么是感叹号,Win7系统wifi信号后出现感叹号怎么办 Win7连接wifi后出现感叹号三种原因和解决方法...
  15. java打印出 锟斤拷_一段java代码带你认识锟斤拷
  16. 计算机上哪个键可以按出符号,键盘符号怎么打出来_各种符号在键盘上怎么打出来-win7之家...
  17. java基础知识-----转
  18. 安装ubuntu 创建分区_安装Ubuntu后如何创建单独的主分区
  19. 记录一个问题:RJ45灯,绿灯与黄灯同时闪烁,连接出问题
  20. 自制USB充电线、数据线、工程线、OTG线的方法

热门文章

  1. 小米MIX3发布:磁动力滑盖全面屏、10G内存,3299起是你的菜吗?
  2. 普罗米修斯Prometheus的安装及Grafana使用
  3. vue入门项目:类新闻类移动端app
  4. Py之twilio:python库之twilio的简介、安装、使用方法之详细攻略
  5. 360+ChatGLM联手研发中国版“微软+OpenAI”
  6. tplink886n变无线打印服务器,TP-Link TL-WR886N V2-V3无线桥接教程设置方法
  7. java通过反射获取加了某个注解的所有的类
  8. 【原创】西门子SCL语言编程 之 多重背景
  9. Android开发类似微信九格宫图片
  10. 个人记录——前后端api对接的一种方式