spring security
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring security内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring security相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring security相关知识
-
SpringBoot集成Spring Security1、Spring Security介绍 Spring security,是一个强大的和高度可定制的身份验证和访问控制框架。它是确保基于Spring的应用程序的标准 ——来自官方参考手册 Spring security 和 shiro 一样,具有认证、授权、加密等用于权限管理的功能。和 shiro 不同的是,Spring security拥有比shiro更丰富的功能,并且,对于Springboot而言,Spring Security比Shiro更合适一些,因为都是Spring家族成员。今天,我们来为SpringBoot项目集成Spring Security。 本文所使用的版本: SpringBoo
-
Spring Security 整合JWT(四)一、前言 本篇文章将讲述Spring Security 简单整合JWT 处理认证授权 基本环境 spring-boot 2.1.8 mybatis-plus 2.2.0 mysql 数据库 maven项目 Spring Security入门学习可参考之前文章: SpringBoot集成Spring Security入门体验(一) https://blog.csdn.net/qq_38225558/article/details/101754743 Spring Security 自定义登录认证(二) https://blog.csdn.net/qq_38225558/article/details/102542072 Spring Security 动态url权限控制(三) https://blog.csdn.net/q
-
Spring Security 快速了解在Spring Security之前我曾经使用 Interceptor 实现了一个简单网站Demo的登录拦截和Session处理工作,虽然能够实现相应的功能,但是无疑Spring Security提供的配置方法更加简单明确,能够更好的保护Web应用。Spring Security的相关结构这里大家可以参考Spring Security的官方介绍文档:spring-security-architecture 简单的来说:Spring Security是一个单一的Filter,其具体的类型是FilterChainProxy,其是作为@Bean在ApplicationContext中配置的。从容器的角度来看,Spring Security是一个单一的Filter,但是在其中有很多额外的Filter,每一个都扮演着他们各自的角色,如下图所示:Spring Security的身份验证,主要由AuthenticationManager这个接口完成,其验证的主要方法是authenticate()public i
-
Spring Security 架构与源码分析Spring Security 主要实现了Authentication(认证,解决who are you? ) 和 Access Control(访问控制,也就是what are you allowed to do?,也称为Authorization)。Spring Security在架构上将认证与授权分离,并提供了扩展点。核心对象主要代码在spring-security-core包下面。要了解Spring Security,需要先关注里面的核心对象。SecurityContextHolder, SecurityContext 和 AuthenticationSecurityContextHolder 是 SecurityContext的存放容器,默认使用ThreadLocal 存储,意味SecurityContext在相同线程中的方法都可用。 SecurityContext主要是存储应用的principal信息,在Spring Security中用Authentication 来表示。获取principa
spring security相关课程
spring security相关教程
- 2.3 Spring Security 相关资源: 官方网站:https://spring.io/projects/spring-security官方实例:https://github.com/spring-projects/spring-security/tree/5.3.2.RELEASE推荐社区:https://stackoverflow.com/questions/tagged/spring-security问题跟进:https://github.com/spring-projects/spring-security/issues
- 2.1 Spring Security 的诞生 Spring Security 是 Spring 家族的中,提供认证、授权和攻击防护功能的一套安全框架。Spring Security 支持命令式和响应式两种开发模式,它也是 Spring 应用在安全框架方面的公认标准。Spring Security 的前身是 Acegi security。Acegi security 在 1.0.7 版本之后便不再跟新,转而以 Spring Security 2.0 的身份出现在 Spring 大家庭中。截止今日(2020 年 5 月 17 日),Spring Security 正式版本已经发展至 5.3,并且已经公布 5.4 的预览版本。
- 3. Spring Security 的特性 Spring Security 的核心特性包括:认证和授权、常规攻击防范、与 Servlet 接口集成、与 Spring MVC 集成等。认证和授权的目的是,让系统知道使用者是谁(认证)?是什么样的身份?允许他做什么?禁止他做什么?通常的做法是要求用户输入自己的用户名和密码,来实现登录和鉴权的过程。常规攻击防范在 Spring Security 安全框架中是默认开启的,常见的威胁抵御方式有:防止伪造跨站请求(CSRF)安全响应头(HTTP Response headers)HTTP 通讯安全作为 Spring 大家族的一员,Spring Security 在与 Spring 引用,尤其是与 Spring boot 应用的结合时,显得极为便利。Spring Security 三大功能
- 2. Spring Security 用法简介 作为一个知名的安全管理框架, Spring Security 对安全管理功能的封装已经非常完整了。我们在使用 Spring Security 时,只需要从配置文件或者数据库中,把用户、权限相关的信息取出来。然后通过配置类方法告诉 Spring Security , Spring Security 就能自动实现认证、授权等安全管理操作了。系统初始化时,告诉 Spring Security 访问路径所需要的对应权限。登录时,告诉 Spring Security 真实用户名和密码。登录成功时,告诉 Spring Security 当前用户具备的权限。用户访问接口时,Spring Security 已经知道用户具备的权限,也知道访问路径需要的对应权限,所以自动判断能否访问。
- 4.7 开发 Spring Security 配置类 现在,我们就需要将用户、权限等信息通过配置类告知 Spring Security 了。4.7.1 定义配置类定义 Spring Security 配置类,通过注解 @EnableWebSecurity 开启安全管理功能。实例:@Configuration@EnableWebSecurity // 开启安全管理public class SecurityConfig { @Autowired private SecurityService securityService;}4.7.2 注册密码加密组件Spring Security 提供了很多种密码加密组件,我们使用官方推荐的 BCryptPasswordEncoder ,直接注册为 Bean 即可。我们之前在数据库中预定义的密码字符串即为 123 加密后的结果。 Spring Security 在验证密码时,会自动调用注册的加密组件,将用户输入的密码加密后再与数据库密码比对。实例: @Bean PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } public static void main(String[] args) { //输出 $2a$10$kLQpA8S1z0KdgR3Cr6jJJ.R.QsIT7nrCdAfsF4Of84ZBX2lvgtbE. System.out.println(new BCryptPasswordEncoder().encode("123")); }4.7.3 将用户密码及权限告知 Spring Security通过注册 UserDetailsService 类型的组件,组件中设置用户密码及权限信息即可。实例: @Bean public UserDetailsService userDetailsService() { return username -> { List<UserDo> users = securityService.getUserByUsername(username); if (users == null || users.size() == 0) { throw new UsernameNotFoundException("用户名错误"); } String password = users.get(0).getPassword(); List<String> apis = securityService.getApisByUsername(username); // 将用户名username、密码password、对应权限列表apis放入组件 return User.withUsername(username).password(password).authorities(apis.toArray(new String[apis.size()])) .build(); }; }4.7.4 设置访问路径需要的权限信息同样,我们通过注册组件,将访问路径需要的权限信息告知 Spring Security 。实例: @Bean public WebSecurityConfigurerAdapter webSecurityConfigurerAdapter() { return new WebSecurityConfigurerAdapter() { @Override public void configure(HttpSecurity httpSecurity) throws Exception { // 开启跨域支持 httpSecurity.cors(); // 从数据库中获取权限列表 List<String> paths = securityService.getApiPaths(); for (String path : paths) { /* 对/xxx/**路径的访问,需要具备xxx权限 例如访问 /addGoods,需要具备addGoods权限 */ httpSecurity.authorizeRequests().antMatchers("/" + path + "/**").hasAuthority(path); } // 未登录时自动跳转/notLogin httpSecurity.authorizeRequests().and().formLogin().loginPage("/notLogin") // 登录处理路径、用户名、密码 .loginProcessingUrl("/login").usernameParameter("username").passwordParameter("password") .permitAll() // 登录成功处理 .successHandler(new AuthenticationSuccessHandler() { @Override public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { httpServletResponse.setContentType("application/json;charset=utf-8"); ResultBo result = new ResultBo<>(); ObjectMapper mapper = new ObjectMapper(); PrintWriter out = httpServletResponse.getWriter(); out.write(mapper.writeValueAsString(result)); out.close(); } }) // 登录失败处理 .failureHandler(new AuthenticationFailureHandler() { @Override public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException { httpServletResponse.setContentType("application/json;charset=utf-8"); ResultBo result = new ResultBo<>(new Exception("登录失败")); ObjectMapper mapper = new ObjectMapper(); PrintWriter out = httpServletResponse.getWriter(); out.write(mapper.writeValueAsString(result)); out.flush(); out.close(); } }); // 禁用csrf(跨站请求伪造) httpSecurity.authorizeRequests().and().csrf().disable(); } }; }按上面的设计,当用户发起访问时:未登录的访问会自动跳转到/notLogin 访问路径。通过 /login 访问路径可以发起登录请求,用户名和密码参数名分别为 username 和 password 。登录成功或失败会返回 ResultBo 序列化后的 JSON 字符串,包含登录成功或失败信息。访问 /xxx 形式的路径,需要具备 xxx 权限。用户所具备的权限已经通过上面的 UserDetailsService 组件告知 Spring Security 了。
- 2.2 Spring Security 和同类型框架的比较 Java 环境下有两大安全框架:Spring Security 和 Shiro。和 Spring Security 一样,Shiro 同样隶属于一个强大的软件社区: Apache。二者的功能类似,都完成了认证和鉴权功能,都有超过十年的发展历史。Shiro 是一个独立的安全框架,Spring Security 则与 Spring 关联紧密,所以在二者的选择上,可以简单的用如下原则区分:如果我们开发 Spring Boot 项目,那优先建议使用 Spring Security 安全框架。如果我们开发其他类型的项目,那请使用 Shiro 作为安全框架。Spring Security 安全框架适合为 Spring Boot 项目提供安全保护,所以如果您是个 Spring Boot 项目的开发人员,且正在寻找一种可以和 Spring Boot 轻松集成的,用于认证和鉴权的框架时,可以优先考虑 Spring Security。
spring security相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议