SpringSecurity异常处理增强,加入ControllerAdvice统一处理异常返回
1. 说明SpringSecurity的实现原理是过滤器,它的执行时间比SpringMVC早,因此在执行SpringSecurity相关功能(如用户登录)时是使用不到SpringMVC的统一返回处理@ContrtollerAdvice + @ExceptionHandler的组合套装的。 2. SpringSecurity 实现 @ContrtollerAdvice增强SpringSecurity想要实现@ControllerAdvice需要对其认证返回 的异常做自定义处理,并引用SpringMVC的异常处理器其思路就是在返回扩展接口中调用SpringMVC的异常解析器来解析处理,这样就衔接上了SpringMVC的扩展 示例实现如下 2.1. 引入依赖引入SpringSecurity和SpringMVC的相关依赖 12345678<dependency> <groupId>org.springframework.boot</groupId> ...
mybatis拦截器Interceptor无法注入spring容器问题及解决方案
说明Mybatis的插件先于spring容器的完全初始化,虽然加了@Component会被扫描加入容器管理,但是此时Mybatis的拦截器lnterceptor注入的对象是还未初始化到容器的。所以通过这种方式拿到的bean为空。 在最后分析为啥插件会先于spring容器完全初始化(不是指在容器之前初始化,是在容器加载完所有的BeanDefinition之前完成) 解决使用@Lazy注解既然先进行完全初始化,那么我们可以先不让其进行属性注入,当需要使用的时候再进行注入,这样就把注入时机延后了采用@Lazy的目的就是在第一次使用时才真正注入,加入容器时注入的是一个代理对象,因此可以解决此问题 12345678@Slf4j@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})public class...
java中执行linux命令部署前端代码
说明执行linux命令可以用Runtime来执行,但是不是很方便,而且需要做很多额外的操作,如windows的换行符等,这里采用 apache的 commons-exec 包来处理 引入依赖maven 依赖 123456<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-exec</artifactId> <version>1.3</version></dependency> 应用中使用应用中直接组装好shell语句,然后执行方法即可,方法如下 123456789101112131415161718192021222324252627282930313233/** * 执行指定命令,输出结果到指定输出流中 * * @param command 命令 * @param out 执行结果输出流 * @return 执行结果状态码:执行成功返回0 * @throws...
SpringSecurity之FormLoginConfigurer的泛型参数分析
1. FormLoginConfigurer说明SpringSecurity采用了一系列的Configurer配置来统一配置过滤器链及其中的 Bean对象配置等,通过全局共享Bean对象实现不同地方注入同一个对象FormLoginConfigurer 主要用于配置UsernamePasswordAuthenticationFilter这个过滤器,也就是默认的表单登录的过滤器 2. FormLoginConfigurer解析先说结论,FormLoginConfigurer 有一个泛型<H extendsHttpSecurityBuilder>,但是它父类AbstractAuthenticationFilterConfigurer有三个泛型, FormLoginConfigurer...
vue父组件传方法给子组件的两种方法
说明vue项目中,当组件由引用时,父组件传给子组件的值可以由两种方法实现 方法一: 父组件像传输数据一样直接传方法给子组件方法二: 利用VueComponent实例的 this.$emit()函数实现 应用方法主要在子组件,父组件主要是入参不同和函数的内容不同,search1代表第一种方法以v-bind方式传递 search2代表第二种方法以v-on方式传递 父组件 12345678<template> <!-- searchPage1 方式直接v-bind传递方法到子组件,子组件props接收 --> <!-- searchPage2 方式 v-on方式绑定到子组件,子组件 this.$emit使用 --> <search-table :searchPage1="searchUser" @searchPage2="searchUserCallback" ...
vue语法
父子组件传递子组件调用父组件的方法父组件 1234567891011<template> <auth-object @loadList="listRole"></auth-object></template><script>methods:{ listRole(params){ //...... }}</script> 子组件auth-object 123let data = {}this.$emit("loadList", params)return data 子组件获取父组件的$emit返回值应用场景:子组件调用父组件的方法并获取到父组件方法的返回值 直接使用let data = this.$emit("loadList",...
windows命令
系统命令杀死进程 12345678910netstat -ano | findstr 80 # 找到进程id,LISTENING标识的行后面为正在监听的端口 # TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 14300# TCP 172.1.0.252:57910 157.148.61.140:8080 ESTABLISHED 5272# TCP [::]:8080 [::]:0 LISTENING 14300tasklist | findstr 14300 #根据端口查询程序名称,可以不要taskkill -PID 14300 -F # 强制关闭某个进程
idea配置Debug调试Vue项目
调试vue项目调试vue项目需要启动两个运行进程,按我理解一个是工程主项目,另一个是监视项目,用来监视变化 主进程 主进程就直接配置一个npm项目就可以了,或者控制台直接npm run serve启动 监视进程 在idea上配置一个java-script工程,其监视的端口为运行项目的端口,如下 然后就可以断点调试了,调试界面与idea相同 PS:但是我发现,不好调啊,为啥总是会往框架里面的代码跑,这就为难了 引用
前端模板说明
报错及解决v-charts 报错v-charts 报错 Cannot read properties of undefined (reading 'map') 这是 v-charts 官方未解决的bug解决: 在main.js中实例化Vue之前加入代码Vue._watchers = Vue.prototype._watchers = []
spring-security框架下session换token方案
说明对于部分应用,尤其是手机应用,是不支持cookie的,因此原本基于session的用户凭证保存就不适用了,需要设计token的方案但是大部分框架都支持的session,例如spring-security,spring-mvc 等、本文讨论token方案的几种设定 实现方案方案一:抛弃session,直接新建一套token流程思路 用户登录的时候生成一个token,服务端保存下token及用户信息,并将token返给前端,完成登录 用户后续所有的请求带上token,将其设置在header请求头中的Authorization字段中 服务端收到解析token,获取用户信息用以确定用户登录,存入用户上下文,应用中也就可以拿到了 实现本实现采用spring-security来进行改造,毕竟spring-security是专业的安全框架, 用它来更具有实用价值。、如果不用spring-security的话用sping-mvc的拦截器来实现也是可以的,但是要保证拦截器的顺序。 引入spring-security依赖12345<dependency> ...
