导航:

pre:  2.项目搭建

next:4.基础信息管理

只挑重点的讲,具体的请看项目源码。

1.项目源码

需要源码的朋友,请捐赠任意金额后留下邮箱发送:)

2.登录页设计

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"><link rel="stylesheet" href="/static/layui/css/layui.css" th:href="@{/static/layui/css/layui.css}"><link rel="stylesheet" href="/static/css/admin.css" th:href="@{/static/css/admin.css}"><link rel="stylesheet" href="/static/css/login.css" th:href="@{/static/css/login.css}"><link id="layuicss-layer" rel="stylesheet" href="/static/css/layer.css" th:href="@{/static/css/layer.css}">
</head>
<body><div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;"><div class="layadmin-user-login-main"><div class="layadmin-user-login-box layadmin-user-login-header"><h2>Bookman</h2><p>图书管理系统</p></div><form class="layadmin-user-login-box layadmin-user-login-body layui-form" th:action="@{/login}" method="post"><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-username" for="username"></label><input type="text" name="username" id="username" lay-verify="required" placeholder="用户名" class="layui-input"></div><div class="layui-form-item"><label class="layadmin-user-login-icon layui-icon layui-icon-password" for="password"></label><input type="password" name="password" id="password" lay-verify="required" placeholder="密码" class="layui-input"></div><div class="layui-form-item"><button class="layui-btn layui-btn-fluid" type="submit" lay-submit="" lay-filter="LAY-user-login-submit">登 入</button></div><div class="layui-form-item" th:if="${param.error}">用户名或密码错误!</div></form></div><div class="layui-trans layadmin-user-login-footer"><p>© 2020 <a href="http://www.layui.com/" target="_blank">laoxu.com</a></p></div></div>
<script src="/static/js/jquery-1.11.3.min.js" th:src="@{/static/js/jquery-1.11.3.min.js}"></script>
<script src="/static/layui/layui.js" th:src="@{/static/layui/layui.js}"></script></body>
</html>

3.spring security配置类

/*** Spring Security配置** @author laoxu* @create 2018-10-26**/
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/*    @Autowiredprivate DataSource dataSource;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.jdbcAuthentication().dataSource(dataSource);}*/@AutowiredMyAuthenctiationSuccessHandler myAuthenctiationSuccessHandler;@Resourceprivate DataSource dataSource;@Resource(name = "userDetailServiceImpl")private UserDetailServiceImpl<User> userService;@Beanpublic PersistentTokenRepository persistentTokenRepository() {JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();// 配置数据源jdbcTokenRepository.setDataSource(dataSource);// 第一次启动的时候自动建表(可以不用这句话,自己手动建表,源码中有语句的)
//        jdbcTokenRepository.setCreateTableOnStartup(true);return jdbcTokenRepository;}@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(userService).passwordEncoder(new MyPasswordEncoder());}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/book/list").permitAll().antMatchers("/bookDetail/*").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().successHandler(myAuthenctiationSuccessHandler).and().logout().permitAll().and().headers().frameOptions().disable();//开启记住我功能//http.rememberMe().tokenRepository(persistentTokenRepository()).userDetailsService(userService).tokenValiditySeconds(86400);//http.rememberMe().rememberMeParameter("remember-me").key("laoxu").tokenValiditySeconds(86400);http.csrf().disable();}@Overridepublic void configure(WebSecurity web) throws Exception {//忽略web.ignoring().antMatchers("/static/**");web.ignoring().antMatchers("/","/index");}
}

4.登录成功处理器

/*** @Description: 自定义登录成功处理类* @Author laoxu* @Date 2019/5/25 23:32**/
@Component
public class MyAuthenctiationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {@AutowiredUserService userService;@Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {response.setContentType("application/json;charset=utf-8");RequestCache cache = new HttpSessionRequestCache();SavedRequest savedRequest = cache.getRequest(request, response);// 如果来源请求为空则跳转到管理后台String url = "admin";/*if((savedRequest==null)){url = "admin";}else{url = savedRequest.getRedirectUrl();}*/// 获取登录用户详细信息User user = userService.getUserByUsername(SecurityUtil.getLoginUser());request.getSession().setAttribute("loginUser",user);// 返回jwtresponse.sendRedirect(url);}
}

5.自定义UserService实现

@Service
public class UserDetailServiceImpl<T extends User> implements UserDetailsService {@Autowiredprivate UserService userService;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {try {User user = userService.getUserByUsername(username);if (user == null) {throw new UsernameNotFoundException("用户:"+username+"不存在!");}//用户权限List<SimpleGrantedAuthority> authorities = new ArrayList<>();/*if (StringUtils.isNotBlank(user.getRoles())) {String[] roles = user.getRoles().split(",");for (String role : roles) {if (StringUtils.isNotBlank(role)) {authorities.add(new SimpleGrantedAuthority(role.trim()));}}}*/return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);} catch (Exception e) {e.printStackTrace();return null;}}}

Spring Boot图书管理系统项目实战-3.用户登录相关推荐

  1. Spring Boot电商项目17:用户模块六:注册接口开发之:使用【GlobalExceptionHandler】来全局统一处理异常;(涉及了@ControllerAdvice等注解)

    说明: (1)为什么写这篇博客?:在[Spring Boot电商项目15:用户模块四:注册接口开发:]中,在Service层中遇到了[用户名重复]的情况,然后Service层把这个情况做成了一个异常, ...

  2. Vue + Spring Boot 学习笔记01:实现用户登录功能

    Vue + Spring Boot 学习笔记01:实现用户登录功能 一.创建后端Spring Boot项目Book Management 二.创建前端Vue项目bm-vue 三.修改后端项目Book ...

  3. (附源码)spring boot图书管理系统 毕业设计 160934

    Springboot图书管理系统的设计与实现 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在 ...

  4. springboot项目实战_2019学习进阶之路:高并发+性能优化+Spring boot等大型项目实战...

    Java架构师主要需要做哪些工作呢? 负责设计和搭建软件系统架构(平台.数据库.接口和应用架构等),解决开发中各种系统架构问题. 优化现有系统的性能,解决软件系统平台关键技术问题攻关.核心功能模块设计 ...

  5. 【struts2+hibernate+spring项目实战】用户登录校验(struts拦截器)

    一.概述 项目中所有页面均放入WEB-INF,所有页面安全性得到了很大程度的提高.但是当用户登录后长时间没有操作时,会造成Session数据的过期,如果此时获取Session中的数据,必定会引发WEB ...

  6. Django项目实战——5—(用户登录、首页用户名展示、项目阶段总结)

    1.用户登录 用户名登录逻辑分析 用户名登录接口设计 请求方式 请求参数:表单 响应结果:HTML 用户名登录逻辑实现 用户后端验证视图文件apps/users/views.py "&quo ...

  7. 【电商项目实战】用户登录(详细篇)

  8. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

  9. 联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码

    联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码 客户拜访记录的列表的显示, 客户拜访记录的保存, 客户拜访记录查询(条件 ...

最新文章

  1. Can't connect to MySQL server on 'localhost' (10061)的解决办法!
  2. 互联网研发中负载均衡算法一点探索
  3. 因为阿里,他们成了“杭漂”
  4. pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集
  5. oracle 创建用户
  6. LeetCode OJ - Surrounded Regions
  7. 浅谈html的语义化和一些简单优化,浅谈HTML的语义化和一些简单优化
  8. 栅栏密码怎么写java程序_简单栅栏密码加密器的JSF版
  9. Java Web学习—编程1:数字三角形+三种解题思路+详细规律
  10. python中如何判断词性_Python3自然语言处理——词性标注
  11. 软件测试工程师自我介绍范文_软件测试工程师面试英文自我介绍范文
  12. P3369 【模板】普通平衡树(fhq treap)
  13. 关于apapche aurora rpm包
  14. 【Python从0到1】第三篇:基础语法(三)
  15. 回首2018,展望2019 | 掘金年度征文
  16. linux磁盘sda1变化,linux系统中sda变成sdb了怎么办
  17. C# 读取电脑硬件信息
  18. 安装vue-cli遇到npm ERR! code ECONNREFUSED
  19. CAD命令集 CAD命令笔记本
  20. 5G + 智能制造 = 未来工厂

热门文章

  1. php mysql 抽奖_使用jQuery+PHP+Mysql实现抽奖程序
  2. Android脚本软件,免费脚本软件安卓化
  3. 抖音干货:抖音如何提高点赞、播放、转发量,获得更多推荐上热门?
  4. HTML菜单栏点击后变色,菜单怎么实现点击后变色_html/css_WEB-ITnose
  5. 将日期设定成上一个月,上一年。
  6. Clickhouse—MergeTree 数据生命周期
  7. 傻妞机器人安装完整教程【最新版】- 11月24日更新
  8. 数学建模——大数据时代下的中小微企业信贷决策(2020年国赛C题)
  9. 系统克隆工具:操作系统一键迁移
  10. 网口浪涌防护电路-Bob Smith电路