SpringSecurity入门
Spring Security入门
一、介绍
Spring Security是一套权限框架,此框架可以帮助我们为项目建立丰富的角色与权限管理。
他的前身是Acegi Security,在以前SpringBoot还未出现的时候,它以繁琐臃肿的配置被人嫌弃。
当 Acegi Security 投入 Spring 怀抱之后,先把这个名字改了,这就是大家所见到的Spring Security了,然后配置也得到了极大的简化。对比同样为权限框架的shiro,相对繁琐的配置依旧让许多开发者望而却步。
直到Springboot出现后,Spring Security重新回到了大众的视野,尤其是SpringCloud出现后,Spring Security的存在感又再次提高。
核心功能:认证和授权
认证:authentication
介绍:简单说就是你是谁,比如说你是哪个用户,在系统中使用用做登录
授权:authorization
介绍:简单说就是能干什么,比如说我是管理员,我能删除别人的评论
二、入门使用
创建SpringBoot项目,这里使用的版本为2.4.5,引入相关依赖
1234 ...
什么是闭包,Java中有闭包吗?
什么是闭包,Java中有闭包吗?
一、介绍
闭包是什么?我学习Java以来,虽然听过这个名词,但我今天才第一次了解它。
所谓闭包,就是在函数中有另一个函数,这个内部函数可以作为参数,外部通过传递的方式,将函数传递进来。从而内部函数可以访问到外部函数的局部变脸。
二、演示
我们使用groovy来演示闭包的使用,它是一门由java优化而来的语言,底层正是class,可以运行再JVM虚拟机上。
1234567891011121314def sth(Closure closure) { def x = 5 def y = 5 println(closure.call(x, y))}// 加sth({x, y -> x + y})// 减sth({x, y -> x - y})// 乘sth({x, y -> x * y})// 除sth({x, y -> x / y})
运行结果如下
在Java中,我们可以使用匿名内部类来完成类似的功能,而在Java8 ...
vue2路由
vue2路由
一、介绍
本文是以前学习 vue2时整理的,对于目前的 vue3有些过时。
专注后端,前端只作为使用学习。
二、路由
作用:用于维护URL跳转和页面之间的关系
使用步骤:
引入vue-router.js文件(必须先引入vue.js)
配置路由规则,url和对应的页面的配置const routes = [{ path: "/", compontent: "组件" }]
创建路由实例对象const router = new VueRouter({routes})
routes:路由规则
path:访问的url
component:指定的组件
name:路由规则名
props:是否解耦路由参数
redirect:路由重定向
12# 当访问/home时,会自动跳转至/index[{ path: "/home" redirect: "/index" }]
linkActiveClass:指定当 ...
vue2基础
vue2基础
一、介绍
本文是以前学习 vue2时整理的,对于目前的 vue3有些过时。
专注后端,前端只作为使用学习。
二、 基础
1)数据绑定
123456789101112131415161718192021222324252627<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>VUE数据绑定</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body> <div id=&q ...
优雅!Spring的重试小工具
优雅!Spring的重试小工具
一、介绍
在日常项目的开发中,避免不了调用第三方服务的情况。
如果是第三方有提供SDK包那还好说,就怕没有,第三方接口还不稳定的情况最恼火了。
这个时候,我们一般都会加上重试机制,手动捕获异常发起重试,不优雅
试试这个spring中的工具spring-retry如何
官网
github地址
二、使用
导入maven依赖,使用的是SpringBoot框架,版本号已经有管理了,直接引入即可。
记得把AOP也引用一下
12345678<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte ...
SpringBoot实现统一响应提示国际化
SpringBoot实现统一响应提示国际化
一、介绍
统一响应大家都见识过,只需要添加上@RestControllerAdvice后进行处理即可
简单示例如下
1234567891011121314151617package com.banmoon.test.core.handler;import com.banmoon.test.obj.dto.ResultData;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;@Slf4j@RestControllerAdvicepublic class ControllerHandler { @ExceptionHandler(Exception.class) public ResultData exceptionHandler(Exce ...
SpringBoot动态修改日志等级
SpringBoot动态修改日志等级
一、介绍
在平常开发中,日志等级都是固定死的,某些debug级别的日志是默认不放开的。
当需要查看生产的日志权限时,发现日志级别不够,可以使用动态修改日志的权限。
由于SpringBoot默认使用的是logback日志,故此本文主要是动态修改logback的日志级别。
二、代码
我们只需要写一个controller接口,如下
1234567891011121314151617181920212223242526272829303132package com.banmoon.test.controller;import ch.qos.logback.classic.Level;import ch.qos.logback.classic.Logger;import ch.qos.logback.classic.LoggerContext;import com.banmoon.test.obj.dto.ResultData;import com.banmoon.test.obj.request.LogLevelChangeRequest;import i ...
为自己模拟的IOC容器添加上DI注入
为自己模拟的IOC容器添加上DI注入
一、介绍
上一篇中,模拟Spring实现了一个简易的IOC容器,完成了初始化bean的操作,统一交给了一个Map集合进行管理。
模拟Spring实现一个简易的IOC容器
现在,将为这个IOC容器添加DI注入功能
二、实现
在编写之前,我们先加一个工具类,用来获取接口所实现的子类Class对象,也是通过子类
12345<dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.10.2</version></dependency>
代码如下,对比上一次,稍稍做了一点封装,使得步骤更加清晰
123456789101112package com.banmoon.test.mockioc.annotation;import java.lang.annotation.ElementType;import java.l ...
vue2中的组件
vue2中的组件
作用:基于组件开发,易维护,易复用
分类:使用的作用域不同分为全局组件和局部组件
注意:
组件名需要与原来的html标签不一致,且不要有大写字母
组件的data数据是一个函数,将对象return出去,与vue实例不一致
组件的template只能存在一个根标签
一、全局组件
1234567891011121314151617181920212223242526272829303132<div id="app"> <my-component></my-component></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script> Vue.component('MyComponent', { template: ` <div> ...
模拟Spring实现一个简易的IOC容器
模拟Spring实现一个简易的IOC容器
一、介绍
在模拟实现 IOC容器之前,我们必须要掌握反射相关的知识,毕竟 IOC容器采用的是反射进行的查找创建。
反射可以看我以前的这篇文章
Java注解的介绍和反射使用 | 半月无霜 (banmoon.top)
二、步骤
在 spring的包中,有这么一个接口 ApplicationContext.java,他是一个容器接口,一切的开始都是由它开始,spring中定义了各种场景下使用的实现类,其中常见有以下几种实现类
AnnotationConfigApplicationContext:通过注解配置初始化容器
ClassPathXmlApplicationContext:通过 xml配置文件初始化容器
AnnotationConfigServletWebApplicationContext:注解配置加载 web环境的容器
既然我们要自己写一个容器,我们也需要一个这样的容器类,接口不接口的无所谓,我们可以不考虑结构,只考虑效果。故我们只需要一个容器类就好了。
除了容器外,我们还需要一个注解,分别作用于类上,作为标识此类要进行初始 ...