聚星Note04 - 管理员登录
聚星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 关联登录请求地址和视图
- 创建 WEB-INF/admin-login.jsp
- spring-web-mvc.xml 配置view-controller
<!-- 关联请求地址和视图,免写handle方法 -->
<mvc:view-controller path="/admin/to/login/page.html" view-name="admin-login" />
- 浏览器访问 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 处理登录失败异常
- 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);
}
- admin-login.jsp 添加错误信息反馈
// <h2 ... ></i> 管理员登录</h2> 标签后添加
<p>${ requestScope.exception.message }</p>
2.1.4 登录逻辑实现
- spring-web-mvc.xml 配置view-controller
<mvc:view-controller path="/admin/to/main/page.html" view-name="admin-main" />
- 新建 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";}
}
- com.turling.gatherStars.service.api.AdminService 添加
Admin getAdminByLoginAcct(String loginAcct, String userPswd);
- 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 注销
- 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";
}
- 修改 admin-main.jsp 中的注销超链接
<li><a href="/admin/do/logout.html"><i class="glyphicon glyphicon-off"></i> 退出系统</a></li>
2.3 抽取后台页面公共部分
- 新建 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>
- 新建 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>
- 新建 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>
- 修改后的 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 创建拦截器
- 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;}
}
- 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 - 管理员登录相关推荐
- Oracle 数据库设置最大进程数参数方法,oracle最大进程数满了处理方法,sysdba管理员登录报“maximum number of processes (150) exceeded“问题解决
oracle 数据库使用 sysdba 管理员登录报: ORA-00020: maximum number of processes (150) exceeded 译:超过了最大进程数(150) 方法 ...
- BCrypt管理员登录密码验证
一.简单入门测试 BCrypt不支持反运算,只支持密码校验 package com.william.test;import org.springframework.security.crypto.bc ...
- java管理员登录_idea实现管理员登录javaweb
mysql创建db_0106数据库, 创建表 添加一条数据,id int自增,密码:为MD5加密 insert into tb_sys values(null,admin,MD5(123)," ...
- 管理员用户不同身份登录页面代码PHP,wordpress管理员登录和普通用户登录后跳转到不同页面-♚付涛纪实阁♚...
这篇文章将向您展示WordPress用户登录后如何重定向到指定页面或者文章的技巧. 一.重定向到网站管理面板. 将以下代码添加到您的当前主题的 functions.php 文件中 二.重定向到指定页面 ...
- day02【后台】管理员登录
day02[后台]管理员登录 1.创建常量类 创建常量类,用于管理整个系统中所用到的常量 public class CrowdConstant {public static final String ...
- 后台userlist.php,后台用户管理(管理员登录后管理会员)
[预备知识] 一.PHP访问MySQL数据库 1.连接到MySQL数据库 $conn=mysql_connect("localhost","root",&quo ...
- java linux root权限管理_Linux--开启root用户并允许管理员登录
用惯windows的朋友都会觉得执行每一个操作都很简单,但装完linux的话可不是如此,可能你会以为你刚装完linux后用事先设置好的用户名和密码登录,你就是管理员的身份了,但其实你跟普通用户一样,执 ...
- Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)
Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...
- Java学生信息管理系统——管理员登录模块(简单易上手)
前言 这一篇是用来记录我编写学生信息管理系统时实现登录操作的过程,这是学生信息管理系统的第一个模块,之后我还会陆续将其它模块分享出来. 其它章节 ------------------------> ...
最新文章
- python int函数详解_Python内置函数OCT详解
- java mvc 分页查询条件_java分页条件查询-GridManager.js表格插件+Pageable分页对象+mybatis pagehelper分页插件...
- python制作训练集_利用Tensorflow简单实现VGGNet,从数据集制作到训练完成测试
- wireshrk中的名词说明
- 传统公司部署OpenStack(t版)简易介绍(二)——Keystone组件部署
- no java virtual machine was found after searching Failed to load the JNI shared library
- 注意!在subList生成子列表之后,一定不要随便更改原列表
- python .py文件变为.so文件进行加密
- python调用cmd执行命令_详解python调用cmd命令三种方法
- 怎么接入WAPI网络防止被蹭网
- gwas snp 和_【交流】关于SNP与GWAS(Genome Wide Association study)的一些想法
- js获取本周日期和上周日期
- css3效果隔两秒旋转然后停两秒再继续旋转,无限循环
- win7计算机名怎么是感叹号,Win7系统wifi信号后出现感叹号怎么办 Win7连接wifi后出现感叹号三种原因和解决方法...
- java打印出 锟斤拷_一段java代码带你认识锟斤拷
- 计算机上哪个键可以按出符号,键盘符号怎么打出来_各种符号在键盘上怎么打出来-win7之家...
- java基础知识-----转
- 安装ubuntu 创建分区_安装Ubuntu后如何创建单独的主分区
- 记录一个问题:RJ45灯,绿灯与黄灯同时闪烁,连接出问题
- 自制USB充电线、数据线、工程线、OTG线的方法
热门文章
- 小米MIX3发布:磁动力滑盖全面屏、10G内存,3299起是你的菜吗?
- 普罗米修斯Prometheus的安装及Grafana使用
- vue入门项目:类新闻类移动端app
- Py之twilio:python库之twilio的简介、安装、使用方法之详细攻略
- 360+ChatGLM联手研发中国版“微软+OpenAI”
- tplink886n变无线打印服务器,TP-Link TL-WR886N V2-V3无线桥接教程设置方法
- java通过反射获取加了某个注解的所有的类
- 【原创】西门子SCL语言编程 之 多重背景
- Android开发类似微信九格宫图片
- 个人记录——前后端api对接的一种方式