当前位置: 首页 > 后端技术 > Java

初识springSecurity

时间:2023-04-01 18:28:18 Java

初识SpringSecurity对于SpringSecurity,可以从其官网的介绍中得到一个大概的了解:SpringSecurity是一个强大的、高度定制化的认证和访问控制框架。它实际上是一个基于Spring的保护系统。应用程序框架安全标准。SpringSecurity是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,SpringSecurity的真正优势在于它可以轻松扩展以满足自定义需求。SpringSecurity的特点可以概括如下:为认证和授权提供全面和可扩展的支持。防止会话固定、劫持请求、跨站请求伪造等攻击。ServletAPI集成。可选择与SpringWebMVC集成。写代码的时候首先要对SpringSecurity有一个整体的了解,然后在编码的时候才能知道对应代码对应的功能。springsecurity的jsp风格很重。如果我们要在前后端分离架构中使用它,就必须对其进行转换。注:springsecurity本身已经帮我们实现了登录和注销功能。这个功能我们不需要重新实现,但是这些都不能满足我们的需求,所以还是要重新实现必须要实现(有点废话),springsecurity框架是一个非常好的框架,切记这句话在SpringSecurity继承的项目中,主要有四个核心jar包:spring-security-core.jar是SpringSecurity的核心包,任何SpringSecurity的所有功能都需要这个包。spring-security-web.jar是Web项目所必需的,它包含过滤器和相关的Web安全基础结构代码。spring-security-config.jar用于解析xml配置文件,在使用SpringSecurity的xml配置文件时使用该包。由于spring-security-web.jar和spring-security-config.jar都依赖spring-security-core.jar,所以只需要importspring-security-web.jar和spring-security-config.jar即可。SpringSecurity对Web系统的支持是基于过滤器组成的过滤器链:springSecurity中定义了很多过滤器。这里我们只关注以下两个过滤器:UsernamePasswordAuthenticationFilter负责登录认证,FilterSecurityInterceptor负责权限授权。SpringSecurity的核心逻辑都在这套过滤器中,会调用各种组件来完成功能。掌握了这些过滤器和组件,你就掌握了SpringSecurity!框架的使用方式是扩展这些过滤器和组件。接下来,让我们一起开启Spring安全之旅吧!首先,创建一个springboot项目并导入依赖项。至此,我们的springsecurity框架就集成好了。很简单,但是框架本身的实现不满足公司的发展(更不用说前后端分离的架构了)所以我们需要自己配置,先创建一个配置类,继承WebSecurityConfigurerAdapter类来重写他的两个方法然后加上@EnableWebSecurity注解至此我们就配置好了springsecurity的配置类protectedvoidconfigure(AuthenticationManagerBuilderauth){}(authentication)protectedvoidconfigure(HttpSecurityhttp){}(authorization)(注:这里是说说session认证)认证很简单,我们只需要实现UserDetailsS??ervice接口,重写它的loadUserByUsername(Stringusername)方法然后注入protectedvoidconfigure(AuthenticationManagerBuilderauth){}方法即可,认证就结束了.是不是很简单?我们先看看如何实现UserDetailsS??ervice接口,重写它的loadUserByUsername。这一步的作用是将用户信息存储在context中,后续的权限验证就是使用这里存储的数据(这里有点糊涂没关系,后面看完权限验证就明白了)。问题来了,那么后面的.passwordEncoder方法是干什么的呢,别着急我会说的,因为springsecurity认为明文密码不安全,所以我们再次注册的时候需要对密码进行加密。这里我们使用springsecurity自带的加密方式。它集成了许多加密器。我们这里使用BCrypt进行加密。很简单,只需要在注册的时候加密密码即可(这里我用的是Bcrypt加密器,有很多,我用这个,然后根据自己的需要选择)然后密码就加密了,我们在认证的时候也要加密.您需要相同的加密器才能读取它。passwordEncoder方法只需要在配置类中注入BCryptPasswordEncoder()即可。你可能会发现抛出异常它是如何处理的?别着急,我会说springsecurity很强大,即使我们抛出异常,它也会帮我们处理,但是它抛出的异常格式等信息不符合我们的开发需求,所以我们需要关闭它的异常处理由我们自定义处理,那么怎么办呢??我们要知道springsecurity的授权拦截是通过filter实现的,所以如果要实现我们的功能,就要自定义filter来替换它原来的filter。这里我们只需要实现他的AuthenticationEntryPoint接口,实现它的方法,然后把这些文件都配置成protectedvoidconfigure(HttpSecurityhttp){}接下来我们实现各种过滤器然后protectvoidconfigure(HttpSecurityhttp)这个方法的主要功能是在){}方法中授权验证权限。剩下的问题:springsecurity中如何进行密码验证,权限问题如何实现……由于时间原因,我们暂时就到此为止。剩下的问题会在这里讨论以后会更新