文章目录

  • 一、构建页面
    • 1、构建登录页面
    • 2、构建后台管理页面
    • 3、复制_fragments
  • 二、实现登录
    • 1、创建用户接口
    • 2、创建用户实现类
    • 3、创建UserRepository
    • 4、初始化一个用户
    • 5、访问:http://localhost:8080/admin
    • 6、输入用户名密码没有反应,更改login.html代码
    • 7、登录成功
    • 8、注销按钮测试
    • 9、添加非空验证
    • 10、添加错误提示
    • 11、效果
  • 三、Md5加密
    • 1、创建MD5加密类
    • 2、查看加密码
    • 3、复制到数据库中
    • 4、修改UserServiceImpl.java代码
    • 5、测试是否加密成功
  • 四、登录拦截器
    • 1、修改blogs.html代码
    • 2、访问:http://localhost:8080/admin/blogs
    • 3、登录拦截类
    • 4、拦截配置类
    • 5、访问:http://localhost:8080/admin/blogs测试是否拦截成功

一、构建页面

1、构建登录页面

<!DOCTYPE html>
<html lang="en">
<head th:replace="admin/_fragments::head(~{::title})"><meta charset="UTF-8"><meta name="viewport" content="width=debice-width,initial-scale=1.0"><title>登录页面</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.css"><link rel="stylesheet" href="../../static/css/css.css">
</head>
<body><br>
<br>
<br>
<div class="m-container-small m-padded-tb-massive" style="max-width: 30em !important;"><div class="ui container"><div class="ui middle aligned center aligned grid"><div class="column"><h2 class="ui teal image header"><div class="content">管理后台登录</div></h2><form class="ui large form" method="post" action="#"><div class="ui segment"><div class="field"><div class="ui left icon input"><i class="user icon"></i><input type="text" name="username" placeholder="用户名"></div></div><div class="field"><div class="ui left icon input"><i class="lock icon"></i><input type="password" name="password" placeholder="密码"></div></div><div class="ui fluid large teal submit button">登   录</div></div><div class="ui error message"></div></form></div></div></div>
</div><!--/*/<th:block th:replace="_fragments :: script">/*/-->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.2/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.js"></script>
<!--/*/</th:block>/*/-->
</body>
</html>

2、构建后台管理页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head th:replace="admin/_fragments::head(~{::title})"><meta charset="UTF-8"><meta name="viewport" content="width=debice-width,initial-scale=1.0"><title>博客管理</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.css"><link rel="stylesheet" href="../../static/css/css.css">
</head>
<body><!--导航栏--><nav th:replace="admin/_fragments::menu(0)" class="ui inverted attached segment m-padded-tb-mini m-shadow-small" ><!--inverted 反色  attached 圆角变直角--><!--设置log--><div class="ui container"><div class="ui inverted secondary stackable menu"><!--stackable(可堆叠效果)会根据页面大小改变显示比例--><h2 class="ui teal header item">管理后台</h2><a href="#" class="m-item item m-mobile-hide"><i class="home icon"></i> 博客</a><a href="#" class="active m-item item m-mobile-hide"><i class="idea icon"></i>分类</a><a href="#" class="m-item item m-mobile-hide"><i class="tags icon"></i>标签</a><!--右侧头像--><div class="right m-item m-mobile-hide menu"><div class="ui dropdown item"><div class="text"><img class="ui avatar image" src="https://unsplash.it/100/100?image=1010">Beauty</div><!--下拉图标--><i class="dropdown icon"></i><div class="menu"><a href="#" class="item">注销</a></div></div></div></div></div><!--移动端响应图标--><a href="#" class="ui menu toggle black icon button m-right-top m-mobile-show"><i class="sidebar icon"></i></a></div></nav><!--二级导航--><div class="ui attached pointing menu"><div class="ui container"><div class="right menu"><a href="#" class="item">发布</a><a href="#" class="teal active item">列表</a></div></div></div><!--中间内容--><div class="m-container-small m-padded-tb-large"><div class="ui m-container"><div class="ui success large message"><h3>Hi,</h3><p>beauty,欢迎登录!</p></div><img src="https://picsum.photos/1000/1000?image=1015" alt="" class="ui rounded bordered fluid image"/></div></div><!--底部--><footer th:replace="admin/_fragments::footer" class="ui inverted vertical segment m-padded-tb-massive"><div class="ui center aligned container"><!--center aligned 居中--><div class="ui inverted divided stackable grid"><!--grid会将div分为16份布局   inverted divided模块之间的线条显示--><!--第一板块--><div class="three wide column"><div class="ui inverted link list"><div class="item"><img src="../../static/imags/erweima.png" class="ui rounded image" alt="" style="width:100px"></div></div></div><!--第二板块--><div class="three wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">最新博客</h4><div class="ui inverted link list"><a href="#" class="item">用户故事(User Story)</a><a href="#" class="item">关于课余练习的清单</a><a href="#" class="item">成功要趁早</a></div></div><!--第三板块--><div class="three wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">联系我</h4><div class="ui inverted link list"><a href="#" class="item">Email:Everyone@162.com</a><a href="#" class="item">QQ:123456789</a></div></div><!--第四板块--><div class="seven wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">Blog</h4><p class="m-text-thin m-text-spaced m-opacity-mini ">这是我的个人博客、会分享关于编程、协作、思考相关的任何内容,希望可以给来到这儿的人有所帮助……</p></div></div><!--第五板块--><div class="ui inverted section divider"></div><p class="m-text-thin m-text-spaced m-opacity-tiny">Copyright @ 2016-2017 Lirenmi Designed by Lirenmi</p></div></footer><!--/*/<th:block th:replace="_fragments :: script">/*/--><script src="https://cdn.jsdelivr.net/npm/jquery@3.2/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.js"></script>
<!--/*/</th:block>/*/-->
<script>$('.menu.toggle').click(function (){$('.m-item').toggleClass('m-mobile-hide');});/*用户名下拉*/$('.ui.dropdown').dropdown({on:'hover'});</script>
</body>
</html>

3、复制_fragments

  • 修改其代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head th:fragment="head(title)"><meta charset="UTF-8"><meta name="viewport" content="width=debice-width,initial-scale=1.0"><title th:replace="${title}">详情页</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/><link rel="stylesheet" href="../static/css/typo.css" th:href="@{/css/typo.css}"><link rel="stylesheet" href="../static/lib/prism/prism.css" th:href="@{/prism/prism.css}"><link rel="stylesheet" href="../static/lib/tocbot/tocbot.css" th:href=@{/tocbot/tocbot.css}><link rel="stylesheet" href="../static/css/css.css" th:href="@{/css/css.css}">
</head>
<body><!--导航栏-->
<nav th:fragment="menu(n)" class="ui inverted attached segment m-padded-tb-mini m-shadow-small" ><!--inverted 反色  attached 圆角变直角--><!--设置log--><div class="ui container"><div class="ui inverted secondary stackable menu"><!--stackable(可堆叠效果)会根据页面大小改变显示比例--><h2 class="ui teal header item">管理后台</h2><a href="#" class="m-item item m-mobile-hide" th:classappend="${n==1} ? 'active'"><i class="home icon"></i> 博客</a><a href="#" class="active m-item item m-mobile-hide" th:classappend="${n==2} ? 'active'"><i class="idea icon"></i>分类</a><a href="#" class="m-item item m-mobile-hide" th:classappend="${n==3} ? 'active'"><i class="tags icon"></i>标签</a><!--右侧头像--><div class="right m-item m-mobile-hide menu"><div class="ui dropdown item"><div class="text"><img class="ui avatar image" src="https://unsplash.it/100/100?image=1010">Beauty</div><!--下拉图标--><i class="dropdown icon"></i><div class="menu"><a href="#" class="item">注销</a></div></div></div></div></div><!--移动端响应图标--><a href="#" class="ui menu toggle black icon button m-right-top m-mobile-show"><i class="sidebar icon"></i></a></div>
</nav><!--底部-->
<footer th:fragment="footer" class="ui inverted vertical segment m-padded-tb-massive"><div class="ui center aligned container"><!--center aligned 居中--><div class="ui inverted divided stackable grid"><!--grid会将div分为16份布局   inverted divided模块之间的线条显示--><!--第一板块--><div class="three wide column"><div class="ui inverted link list"><div class="item"><img src="../static/imags/erweima.png" th:src="@{/imags/erweima.png}" class="ui rounded image" alt="" style="width:100px"></div></div></div><!--第二板块--><div class="three wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">最新博客</h4><div class="ui inverted link list"><a href="#" class="item">用户故事(User Story)</a><a href="#" class="item">关于课余练习的清单</a><a href="#" class="item">成功要趁早</a></div></div><!--第三板块--><div class="three wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">联系我</h4><div class="ui inverted link list"><a href="#" class="item">Email:Everyone@162.com</a><a href="#" class="item">QQ:123456789</a></div></div><!--第四板块--><div class="seven wide column"><h4 class="ui inverted header m-text-thin m-text-spaced ">Blog</h4><p class="m-text-thin m-text-spaced m-opacity-mini ">这是我的个人博客、会分享关于编程、协作、思考相关的任何内容,希望可以给来到这儿的人有所帮助……</p></div></div><!--第五板块--><div class="ui inverted section divider"></div><p class="m-text-thin m-text-spaced m-opacity-tiny">Copyright @ 2016-2017 Lirenmi Designed by Lirenmi</p></div></footer><th:block th:fragment="script"><script src="https://cdn.jsdelivr.net/npm/jquery@3.2/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/semantic-ui/2.2.10/semantic.min.js"></script><script src="https://cdn.jsdelivr.net/npm/jquery.scrollto@2.1.3/jquery.scrollTo.min.js"></script><script src="../static/lib/prism/prism.js" th:src="@{/prism/prism.js}"></script><script src="../static/lib/tocbot/tocbot.min.js" th:src="@{/tocbot/tocbot.min.js}"></script><script src="../static/lib/qrcode/qrcode.min.js" th:src="@{/qrcode/qrcode.min.js}"></script><script src="../static/lib/waypoints/jquery.waypoints.min.js" th:src="@{/waypoints/jquery.waypoints.min.js}"></script>
</th:block></body>
</html>

二、实现登录

1、创建用户接口

package net.zjs.lrm.service;import net.zjs.lrm.po.User;/*** 功能:用户接口* 作者:zjs* 日期:2021-06-11*/
public interface UserService {User checkUser(String username, String password);
}

2、创建用户实现类

package net.zjs.lrm.service;import net.zjs.lrm.dao.UserRepository;
import net.zjs.lrm.po.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 功能:用户实现类* 作者:zjs* 日期:2021-06-11*/
@Service
public class UserServiceImpl implements UserService{/*注入*/@Autowiredprivate UserRepository userRepository;@Overridepublic User checkUser(String username, String password) {User user= userRepository.findByUsernameAndPassword(username,password);return user;}
}

3、创建UserRepository

package net.zjs.lrm.dao;import net.zjs.lrm.po.User;
import org.springframework.data.jpa.repository.JpaRepository;/*** 功能:* 作者:zjs* 日期:2021-06-11*/
public interface UserRepository extends JpaRepository<User,Long> {User findByUsernameAndPassword(String username,String password);}

4、初始化一个用户

5、访问:http://localhost:8080/admin

6、输入用户名密码没有反应,更改login.html代码

7、登录成功

8、注销按钮测试

9、添加非空验证

10、添加错误提示

11、效果

三、Md5加密

1、创建MD5加密类

package net.zjs.lrm.util;import sun.plugin2.message.Message;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** 功能:MD5加密类* 作者:zjs* 日期:2021-06-13*/
public class MD5Utils {/*MD5加密*/public static String code(String str){try{MessageDigest md= MessageDigest.getInstance("MD5");md.update(str.getBytes());byte[]byteDigest=md.digest();int i;StringBuffer buf=new StringBuffer("");for(int offset=0;offset<byteDigest.length;offset++){i=byteDigest[offset];if (i<0)i+=256;if(i<16)buf.append("0");buf.append(Integer.toString(i));}//32位加密return buf.toString();//16位加密
//            return  buf.toString().substring(8,24);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}public static void main(String[] args){System.out.println(code("123"));}}

2、查看加密码

3、复制到数据库中

4、修改UserServiceImpl.java代码

5、测试是否加密成功

四、登录拦截器

1、修改blogs.html代码



2、访问:http://localhost:8080/admin/blogs

  • 实现在没有登录的情况下不能访问我们的内部网页

3、登录拦截类

package net.zjs.lrm.interceptor;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 功能:登录拦截* 作者:zjs* 日期:2021-06-13*/
public class LoginInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{if (request.getSession().getAttribute("user")==null){response.sendRedirect("/admin");return false;}return true;}
}

4、拦截配置类

package net.zjs.lrm.interceptor;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** 功能:拦截配置类* 作者:zjs* 日期:2021-06-13*/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/admin/**")/*拦截所有*//*排除admin    admin/login两个被拦截*/.excludePathPatterns("/admin").excludePathPatterns("/admin/login");}
}

5、访问:http://localhost:8080/admin/blogs测试是否拦截成功

  • 注意:只有登录之后才能访问其他页面


Spring Boot制作个人博客-后端管理(登录)相关推荐

  1. Spring Boot制作个人博客-后端管理(博客管理)

    文章目录 一.博客分页查询 1.对blog.html网页作更改 2.新建BlogService接口 3.新建BlogRepository接口 4.新建BlogServiceImpl.java类 5.修 ...

  2. 基于Spring Boot技术栈博客系统企业级前后端实战之课程导论(零)

    零.说明(必读) 一.课程概述 1.1 名称 1.2 功能 1.3 技术点 1.4 目标 二.核心功能 2.1 用户管理 2.2 安全设置 2.3 博客管理 2.4 评论管理 2.5 点赞管理 2.6 ...

  3. 基于Spring Boot的个人博客系统(源码+数据库)

    目录 一.系统功能框架图 二.开发技术 三.开发环境 四.页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 ​5.后台页面 6.后台文件编辑页面 ​7.后台文章管理列表页面 五.文 ...

  4. Spring boot 搭建个人博客系统(二)——登录注册功能

    Spring boot 搭建个人博客系统(二)--登录注册功能 一直想用Spring boot 搭建一个属于自己的博客系统,刚好前段时间学习了叶神的牛客项目课受益匪浅,乘热打铁也主要是学习,好让自己熟 ...

  5. 基于Spring Boot的个人博客系统的设计与实现毕业设计源码271611

    目  录 摘要 1 绪论 1.1研究意义 1.2开发背景 1.3系统开发技术的特色 1.4论文结构与章节安排 2个人博客系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 ...

  6. Spring Boot 开发个人博客--后台登录

    -- 本文转自onestar :[SpringBoot搭建个人博客]- 后台登录(四) 本文将从MVC架构.MD5加密.登录拦截器来讲述个人博客系统的后台登录实现 MVC架构 后台开发采用的是MVC架 ...

  7. 【备忘】Spring Boot技术栈博客企业前后端

    第1章 Spring Boot 简介     第2章 开启 Spring Boot 的第一个 Web 项目     第3章 一个Hello World项目     第4章 开发环境的搭建     第5 ...

  8. spring boot+vue个人博客七:打包部署,多节点部署方案

    系列大纲 GitHub(还没开发完成) 在线演示www.yzpnb.top 第一章:(后端)搭建spring boot脚手架:https://blog.csdn.net/grd_java/articl ...

  9. 基于 Spring Boot 的个人博客系统设计与实现(源码+数据库+42页论文)

    目录 若下载链接失效,请私信我:或加vx(grzyfun)发送资源 1.选题来源 2.项目背景 3.可行性分析 4.数据字典 5.开发环境介绍 6.数据库设计 7.界面展示 8.测试 9.文档目录,计 ...

最新文章

  1. 算法基础知识科普:8大搜索算法之顺序搜索
  2. 分布式监控系统开发【day38】:监控数据如何画图(九)
  3. how is metadata got - DB table iwfndi_med_srh and IWFNDCL_MGW_REQUEST_MANAG
  4. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
  5. python钓鱼网站_学习笔记6.0 Django入门创建一个钓鱼网站
  6. 搭建大数据平台的步骤有哪些
  7. c++之友元函数和友元类
  8. 在WIN10专业版上安装WINCC7.4的踩坑之路
  9. Ember之Computed Properties计算属性
  10. rtorrent ubuntu端命令行种子下载器
  11. 听老罗讲这一代人的学习方法有感
  12. 普林斯顿陈丹琦组:以实体为问题中心,让稠密检索模型DPR光环暗淡
  13. java assist_Java-Javaassist(一)
  14. Android Handler机制(一) 为什么设计Handler
  15. 哈哈日语 日语五十音图记忆和发音方法
  16. 竞远安全冲刺创业板:拟募资4亿 启元投资与云游软件是股东
  17. 啊哈c语言 潦草的初步笔记(1)
  18. Laravel源码解析之契约
  19. 中国计算机技术职业资格网
  20. 蓝桥杯旧嵌入式板STM32F103RBT6驱动练习笔记

热门文章

  1. 使用poi+itextpdf将word转成pdf
  2. 详解FLAS骨骼绑定教程
  3. 鲁迅先生留给青年人的话,直指人心
  4. c语言砍头游戏,美队被砍头?《复联4》原剧情太可怕了!
  5. 有关于simulink无法打开slx:错误使用open(line 162) no such file or directory
  6. Language Focus
  7. parallels desktop 中ubuntu忘记密码
  8. 微信公众号h5游戏核销流程
  9. wordexp函数学习
  10. 如何使用RSS阅读器