spirngboot前后分离项目使用的技术栈整理:一
spring framework
spring框架核心技术
IOC:控制反转,是spring的一个容器用来管理对象,降低对象和对象之间的耦合性,对bean对象创建和生命周期进行管理。
DI:依赖注入,把属于注入到对象中
AOP :面向切面编程的一种思想,可以在不改变代码的情况下,对代码进行增强。
SpringBoot
服务spring框架的框架,可以简化配置,快速开发,集成了各种功能可以方便的使用,
Interceptor
拦截器在项目中实现权限验证,日志记录,性能监控 在一个执行的流程中如果想干预或者终止流程都可以通过拦截器实现。
自定义 Interceptor 必须实现HandlerInterceptor接口或继承HandlerInterceptorAdapter 实现三个方法
- 1:preHandler
方法在请求处理之前被调用。该方法在 Interceptor 类中最先执行,用来进行一些前置初始化操作或是对当前请求做预处理,也可以进行一些判断来决定请求是否要继续进行下去。该方法的返回至是 Boolean 类型,当它返回 false 时,表示请求结束,后续的 Interceptor 和 Controller 都不会再执行;当它返回为 true 时会继续调用下一个 Interceptor 的 preHandle 方法,如果已经是最后一个 Interceptor 的时候就会调用当前请求的 Controller 方法。 - 2:postHandler
Controller 方法调用之后执行,但是它会在 DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对 Controller 处理之后的 ModelAndView 对象进行操作 - 3:afterCompletion
该方法将在整个请求结束之后,也就是在 DispatcherServlet 渲染了对应的视图之后执行。此方法主要用来进行资源清理。
过滤器,可以拿到原始http请求,但是拿不到请求的控制器和请求控制器中的方法,
拦截器,可以拿到请求控制器和里面的方法,但是拿不到请求方法中的参数,
aop切面,可以拿到方法中的参数,但是拿不到http请求和响应的对象,
Filter
过滤器,项目中用来处理请求,比如 Session 校验, 判断用户权限, 不符合设定条件,则会被重定向特殊的地址或者设定的响应, 过滤敏感词汇,设置编码, 防止XSS攻击的过滤器
●note 实现 Filter接口,并重写它的三个方法
○ init -- filter对象在服务器启动时就会自动创建
○ doFilter -- 每次有拦截到请求时都会调用,可以调用多次;
○ destroy(滴斯踹) -- filter对象在服务器关闭/应用移除时销毁
拦截方式
○ note:默认只拦截 从浏览器端过来的正常request,转发是默认不拦截,如果希望拦截到转发的资源跳转,需要通过配置
○ dispatcherTypes:不配置,默认过滤所有方式的请求
security安全认证
Spring提供的一个安全框架,提供认证和授权功能,最主要的是它提供了简单的使用方式,同时又有很高的灵活性,简单,灵活,强大。
核心组件有:
SecurityContext
安全上下文,用户通过Spring Security 的校验之后,验证信息存储在SecurityContext中。实际上其主要作用就是获取Authentication对象。
SecurityContextHolder
它会为每个请求恢复上下文SecurityContextHolder,并且最重要的是,在请求完成时清除SecurityContextHolder。SecurityContextHolder是一个类,他的功能方法都是静态的(static)。
SecurityContextHolder可以设置指定JVM策略(SecurityContext的存储策略),这个策略有三种:
● MODE_THREADLOCAL:SecurityContext 存储在线程中。
● MODE_INHERITABLETHREADLOCAL:SecurityContext 存储在线程中,但子线程可以获取到父线程中的 SecurityContext。
● MODE_GLOBAL:SecurityContext 在所有线程中都相同。
默认使用MODE_THREADLOCAL模式
Authentication
是一组用户名密码信息。Authentication也是一个接口
接口有4个get方法,分别获取
● Authorities, 填充的是用户角色信息。
● Credentials,直译,证书。填充的是密码。
● Details ,用户信息。
● ,Principal 直译,形容词是“主要的,最重要的”,名词是“负责人,资本,本金”。感觉很别扭,所以,还是不翻译了,直接用原词principal来表示这个概念,其填充的是用户名。
因此可以推断其实现类有这4个属性。这几个方法作用如下:
● getAuthorities: 获取用户权限,一般情况下获取到的是用户的角色信息。
● getCredentials: 获取证明用户认证的信息,通常情况下获取到的是密码等信息。
● getDetails: 获取用户的额外信息,(这部分信息可以是我们的用户表中的信息)
● getPrincipal: 获取用户身份信息,在未认证的情况下获取到的是用户名,在已认证的情况下获取到的是 UserDetails (UserDetails也是一个接口,里边的方法有getUsername,getPassword等)。
● isAuthenticated: 获取当前 Authentication 是否已认证。
● setAuthenticated: 设置当前 Authentication 是否已认证(true or false)
Userdetails
是用户信息的意思。其存储的就是用户信息
● getAuthorites:获取用户权限,本质上是用户的角色信息。
● getPassword: 获取密码。
● getUserName: 获取用户名。
● isAccountNonExpired: 账户是否过期。
● isAccountNonLocked: 账户是否被锁定。
● isCredentialsNonExpired: 密码是否过期。
● isEnabled: 账户是否可用
UserDetailsService
UserDetailsService也是一个接口,且只有一个方法loadUserByUsername,他可以用来获取UserDetails。
通常在spring security应用中,我们会自定义一个CustomUserDetailsService来实现UserDetailsService接口,并实现其public UserDetails loadUserByUsername(final String login);方法。我们在实现loadUserByUsername方法的时候,就可以通过查询数据库(或者是缓存、或者是其他的存储形式)来获取用户信息,然后组装成一个UserDetails,(通常是一个org.springframework.security.core.userdetails.User,它继承自UserDetails) 并返回。
AuthenticationManager
AuthenticationManager 的作用就是校验Authentication,如果验证失败会抛出AuthenticationException 异常
前后分离的项目设置的是不创建不使用session。实际中我们的前后端分离项目都是无状态的。并没有登录状态保持,服务器通过客户端调用传递的token来识别调用者是谁。

浙公网安备 33010602011771号