Spring Security

恕我直言你可能真的不会java第8篇-函数式接口

你离开我真会死。 提交于 2020-08-17 03:22:37
一、函数式接口是什么? 所谓的函数式接口,实际上就是接口里面 只能有一个抽象方法的接口 。我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。 只有一个抽象方法?那上图中的equals方法不是也没有函数体么?不急,和我一起往下看! 二、函数式接口的特点 接口有且仅有一个抽象方法,如上图的抽象方法compare 允许定义静态非抽象方法 允许定义默认defalut非抽象方法(default方法也是java8才有的,见下文) 允许java.lang.Object中的public方法,如上图的方法equals。 FunctionInterface注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错 甚至可以说:函数式接口是专门为lambda表达式准备的, lambda表达式是只实现接口中唯一的抽象方法的匿名实现类 。 三、default关键字 顺便讲一下default关键字,在java8之前 接口是不能有方法的实现,所有方法全都是抽象方法 实现接口就必须实现接口里面的所有方法 这就导致一个问题: 当一个接口有很多的实现类的时候,修改这个接口就变成了一个非常麻烦的事

SpringSecurity使用json登陆

若如初见. 提交于 2020-08-16 23:35:54
一、创建项目并导入依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 二、相关配置和代码 2.1)application .properties 配置密码 注:我这里从简,可以先去看 https://www.cnblogs.com/fernfei/p/12185186.html 如何配置密码 spring.security.user.name = admin spring.security.user.password = 123 2.2)创建自定义的身份过滤类 2.3)写json登陆之前先看一下源码,了解一下它是如何表单登录的 2.3.1)在Idea中连按连下shift键,搜索UsernamePasswordAuthenticationFilter类 2.3.2)进入后再按Ctrl

SpringCloud之Security

回眸只為那壹抹淺笑 提交于 2020-08-16 22:30:24
Spring Security是Spring提供的一个安全框架,提供认证和授权功能,最主要的是它提供了简单的使用方式,同时又有很高的灵活性,简单,灵活,强大。 我个人博客系统采用的权限框架就是Spring Security,正好整合到SpringCloud里面。 一般系统里关于角色方面通常有这么几张表,角色表、用户-角色表、菜单表、角色-菜单表等。 不过我个人博客系统主要以wordpress作为参考,沿用其12张表,如图: 一、导入Maven依赖 <properties> <jjwt.version> 0.9 . 0 </jjwt.version> <spring-security-jwt.version> 1.0 . 9 .RELEASE</spring-security-jwt.version> </properties> <!-- springsecurity--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring

超给力,一键生成数据库文档-数据库表结构逆向工程

杀马特。学长 韩版系。学妹 提交于 2020-08-16 19:15:55
一、解决什么问题 数据库文档是我们在企业项目开发中需要交付的文档,通常需要开发人员去手工编写。编写完成后,数据库发生变更又需要手动的进行修改,从而浪费了大量的人力。并且这种文档并没有什么技术含量,被安排做这个工作的程序员往往自己心里会有抵触情绪,悲观的预期自己在团队的位置,造成离职也是可能的。如下面的这种文档的内容: 笔者最近在github上面发现一个数据库文档生成工具: screw (螺丝钉)。该工具能够通过简单地配置,快速的根据数据库表结构进行逆向工程,将数据库表结构及字段逆向生成为文档。 二、特点 简洁、轻量、设计良好 多数据库支持:MySQL、MariaDB、TIDB、Oracle、 SqlServer、PostgreSQL、Cache DB 多种格式文档: html、word、 markdwon 灵活扩展:支持用户自定义模板和展示样式修改(freemarker模板) 三、依赖库探究 mvn中央仓库查看最新版本 ,将如下的maven坐标引入到Spring Boot项目中去: <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-core</artifactId> <version>1.0.3</version> </dependency> 从maven仓库的编译依赖中可以看到,screw

恕我直言你可能真的不会java第4篇:Stream管道流Map操作

末鹿安然 提交于 2020-08-16 07:19:49
一、回顾Stream管道流map的基础用法 最简单的需求:将集合中的每一个字符串,全部转换成大写! List<String> alpha = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur"); //不使用Stream管道流 List<String> alphaUpper = new ArrayList<>(); for (String s : alpha) { alphaUpper.add(s.toUpperCase()); } System.out.println(alphaUpper); //[MONKEY, LION, GIRAFFE, LEMUR] // 使用Stream管道流 List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList()); //上面使用了方法引用,和下面的lambda表达式语法效果是一样的 //List<String> collect = alpha.stream().map(s -> s.toUpperCase()).collect(Collectors.toList()); System.out.println(collect); //[MONKEY, LION, GIRAFFE

项目部署点一下按钮就可以,全流程自动化

纵饮孤独 提交于 2020-08-16 06:12:49
我们平时在开发一些小项目的时候,有快速部署发布的这样的需求,我感觉最智能的方式可能是喊一声“发布”,应用程序就能自动打包发布到服务器上并运行起来。因为项目的规模比较小,我们可能不会应用到DevOps团队。我们希望有一个小工具,帮我们实现应用程序的快速上线。 Alibaba Cloud ToolKit就可以帮助我们就解决这个问题,但是我们还是得打一点小小的折扣,我们无法实现“喊一声”,但是我们可以实现“按一下”就发布应用程序。对于看文档感觉乏味的同学: 点这里,这里有本文对应的操作《视频》 。 第一步:安装IDEA插件Alibaba Cloud ToolKit IDEA File-> Settings-> Plugins->插件市场搜索alibaba-> 安装install Alibaba Cloud ToolKit。 插件安装完成之后,重启IDEA编辑器。 第二步:添加服务器 插件安装完成之后,在IDEA中找到“Alibaba Cloud View” 里面的Host的Tab框。 点击“Add Host”按钮之后弹出如下对话框,添加远程服务器主机IP及用户名密码。 添加完成之后多出一条Host记录 第三步:为服务器添加命令行 将一些在该服务器上经常使用的命令行,固化为command配置 点击command,执行添加命令行操作 对于应用部署,需要使用到如下两个命令行 # 删除历史启动的

武汉实录|记Guide哥的一次晚餐所见所感

那年仲夏 提交于 2020-08-15 21:43:50
大家好,我是Guide哥,一个三观比主角还正的技术人。 优质文章分类整理 。 时隔一周,Guide 哥又又回来武汉了。 上次来的时间匆忙,只是短暂停留了一下,尚未去下班后和同事们聚餐的地方走走看看,也未曾去周末里和女朋友逛街玩耍的光谷步行街瞧瞧。正琢磨晚饭怎么解决时,想着还是去以前熟悉的店吃饭来促进下消费吧! 乘坐地铁去光谷广场的时候,空荡荡的地铁站里和我等待同一辆车的只有一个低头看手机的大叔,往日里地铁 2 号线是最拥挤的,更别说是周五的晚上了。大家都说武汉是一座年轻人的城市,因为在校大学生人数超过百万,每到周末呀,地铁里熙熙攘攘的年轻人高谈阔论,充斥着阳光的气息。嗯,车来了,Guide 哥走了进去随便找了个座位坐下了。 不得不说,疫情之下,餐饮业和服务业都最受打击。等不来顾客,房租空转,无法转手更不敢开店。平日里热闹的光谷步行街,失去了往日的繁华,陷入了无声的寂静。看到此番场景自己还是挺难受的,心里很不是滋味,不知有多少辛辛苦苦做的一辈子的人因为这场疫情而破产。 光谷作为武汉的交通枢纽,这里的步行街曾经是武汉逛街首选地之一,一二楼服装鞋帽饰品,三四楼美食城影院 KTV 电玩城,无论什么时候,这里都是熙攘交错、人来人往、灯光音乐不止。 而今,它们都仿佛按下了暂停键。沿街隔三岔五关闭的店铺和醒目的转让信息,看的让人心疼。 好了,准备吃饭了。走过一串餐厅

Spring的学习与实战

放肆的年华 提交于 2020-08-15 11:30:23
目录 一、Spring起步 学习路线图 Spring的基础知识 什么是Spring Spring框架核心模块 SpringBoot 第一个Spring应用DEMO 编写自己的第一个SpringMVC例子 尝试使用Spring Boot DevTools Spring起步小结 二、基于SpringMVC开发web应用 创建数据模型 创建业务逻辑 创建控制器 设计视图模板 运行Web应用 表单校验 展现校验错误 基于SpringMVC开发web应用小结 三、实现数据持久化 数据库 建立用户信息登记表 Web应用项目集成mysql 使用JdbcTemplate实现数据持久化 再次运行Web应用 实现数据持久化小结 四、使用Spring Data实现数据持久化 Spring Data 四、使用Spring Data JPA持久化数据 添加JPA starter依赖 修改实体类,添加JPA映射注解 声明JPA repository接口 服务层repository 再次运行Web应用 自定义JPA repository 服务层增加查找接口 控制器增加用户查找功能 视图层增加用户查找页面 查找功能测试 使用Spring Data实现数据持久化小结 五、使用Spring Security安全框架保护web应用 启用Spring Security Spring Security的基本登录认证

SpringSecurity使用json登陆

让人想犯罪 __ 提交于 2020-08-15 10:07:41
一、创建项目并导入依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-security </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 二、相关配置和代码 2.1)application .properties 配置密码 注:我这里从简,可以先去看 https://www.cnblogs.com/fernfei/p/12185186.html 如何配置密码 spring.security.user.name = admin spring.security.user.password = 123 2.2)创建自定义的身份过滤类 2.3)写json登陆之前先看一下源码,了解一下它是如何表单登录的 2.3.1)在Idea中连按连下shift键,搜索UsernamePasswordAuthenticationFilter类 2.3.2)进入后再按Ctrl

Spring Security 实战干货:理解AuthenticationManager

会有一股神秘感。 提交于 2020-08-15 07:59:39
1. 前言 我们 上一篇 介绍了 UsernamePasswordAuthenticationFilter 的工作流程,留下了一个小小的伏笔,作为一个 Servlet Filter 应该存在一个 doFilter 实现方法,而它却没有,其实它的父类 AbstractAuthenticationProcessingFilter 提供了具体的实现。稍后我们会根据这个实现引出今天的主角 AuthenticationManager ,来继续介绍用户的认证过程。 2. AbstractAuthenticationProcessingFilter 我们来看看 AbstractAuthenticationProcessingFilter 的核心方法 doFilter 的实现: public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; // 先通过请求的uri来判断是否需要认证,比如默认的