SpringBoot-05-Security认证授权(入门)

1、认识Spring Security

        一、什么是Spring Security

         Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。

        Spring Security是一个框架,提供 认证(authentication)授权(authorization) 和 保护,以抵御常见的攻击。它对保护命令式和响应式应用程序有一流的支持,是保护基于Spring的应用程序的事实标准

        二、为什么要用Spring Security

        

          SpringBoot 没有发布之前,Shiro 应用更加广泛,因为 Shiro 是一个强大且易用的 Java 安全框架,能够非常清晰的处理身份验证、授权、管理会话以及密码加密。利用其易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。但是 Shiro 只是一个框架而已,其中的内容需要自己的去构建,前后是自己的,中间是Shiro帮我们去搭建和配置好的。

        SpringBoot 发布后,随着其快速发展,Spring Security 重新进入人们的视野。SpringBoot 解决了 Spring Security 各种复杂的配置,Spring Security 在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全,也就是说 Spring Security 除了不能脱离 Spring,Shiro 的功能它都有

       在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。
在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

        我们的shiro也是用于认证授权的,但是SpringSecurity是我们的Spring全家桶的一位选手,是和SpringBoot与SpringCloud是完美集成的

2、集成Spring Security实现认证

     首先我们要知道没有引入Spring Security依赖之前,我们的页面是能够正常访问的

      现在我们如果要实现Spring Security需要引入依赖

  <dependency>-->
          <groupId>org.springframework.boot</groupId>-->
          <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

    我们引入之后再启动一下项目,我们会发现我们突然多了一个登录页面,这个登录页面就是Security的,并且我们在控制台中可以看到一串密钥一样的东西

    其实这个密钥是security给我们生成的一个密码,因为我们现在没有自定义,我们输入用户名: user,输入的密码就是控制台打印的,我们就可以进入我们的页面了,难道没有人觉得这是一个aop思想吗,就是在你访问页面的时候突然给你拦截了,看你是否登陆了,其实security内是一个过滤链,里面有十几种拦截器,这里我们就先不扒源码了,等我后面出Spring Security与JWT令牌的时候我们可以详细讲解一下,这里留一个悬念

 一、使用配置文件

  这里如果我们使用security提供的用户名密码是肯定不行的,所以我们可以通过springboot的核心配置文件来配置用户名密码

    我们再重启之后就可以使用我们自定义的用户名和密码进行登录,控制台也不会给我们随机的密码了

   二、java配置文件

 而我们的登录页面也不可能使用人家给的,我们需要使用到自己的

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login" method="post">
  用户名:<input type="text" name="username">
  <br/>
  密码:<input type="password" name="password"><br>
  <input type="submit" value="登录">
  <br/>
</form>
</body>
</html>

 接下来就是我们的controller层,用于测试我们写一个请求

@RestController
public class MyController {
    @RequestMapping("/test")
    public String test(){
        return "test";
    }
}

 开始我们的java配置文件

        EnableWebSecurity注解:  启用Web安全配置的注解。当这个注解被应用到一个配置类上时,它会启用Spring Security的Web安全功能。

        Configuration注解: 声明这是一个配置类

       我们的第一个方法是来用于认证的,

       inMemoryAuthentication是将我们的信息写入到内存中,这里写项目是不推荐的,如果用户多的话非常占用内存,所以等我们下一节会教大家另一种方式来写

       passwordEncoder是定义一下我们的密码编码格式,因为一般我们的敏感数据是需要通过加密来实现的,不被加密的数据称为 明文,反过来就是密文

      这里我们设置了一个用户名叫做admin,密码是通过BCryptPasswordEncoder类来把这个密码转成密文,我们可以打印一下看看是什么东西,然后给他一个角色,他是admin角色,这里也留一个悬念,我们下节会给大家讲

      我们第二个方法其实就是用于授权的

      第一开始我们设置了我们的登录页面是我们自己的,我的login.html是在static包下,所以可以使用/直接访问到,这里第一行的意思就是我们的登录页面是login.html,并且所有人都可以访问

      第二行是我们的登录处理路径,就是我们输入完用户名密码提交的路径,这个也是所有人可以访问,如果当不了的话,我们的用户名和密码是传不过去的

      第三行是我们的form表单上的用户名的输入框的name是username,所以这里也是username,password也是这样的

     第四行是我们其他的任何一个请求都会被拦截,除了我们上面定义过的

     http.csrf().disable();如果没有这行代码导致用户无法被认证。这行代码的含义是:关闭 csrf 防护 .SRF(Cross-site request forgery)跨站请求伪造,也被称为“OneClick Attack” 或者 Session Riding。通过伪造用户请求访问受信任站点的非法请求访问

@EnableWebSecurity
@Configuration
public class MySecurityConfig extends WebSecurityConfigurerAdapter
{
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .passwordEncoder(new BCryptPasswordEncoder())
                .withUser("admin").password(new BCryptPasswordEncoder().encode("123456"))
                .roles("admin");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin().loginPage("/login.html").permitAll()
                .loginProcessingUrl("/login").permitAll()
                .passwordParameter("password").usernameParameter("username");
        http.authorizeRequests().anyRequest().authenticated();

      http.csrf().disable();
    }
}

 我们通过这样的配置之后再次访问就可以跳转到我们的登录页面,下节课我们会详细讲解springSecurity,我们会使用到 jwt令牌是用于前后端分离使用到的,也会使用到我们的redis缓存,希望大家留一个关注,我们下次见

3、面试题

 一、什么是Spring Security?核心功能?


      Spring Security是一个基于Spring框架的安全框架,提供了完整的安全解决方案,包括认证、授权、攻击防护等功能。

其核心功能包括:

认证:提供了多种认证方式,如表单认证、HTTP Basic认证、OAuth2认证等,可以与多种身份验证机制集成。

授权:提供了多种授权方式,如角色授权、基于表达式的授权等,可以对应用程序中的不同资源进行授权。

攻击防护:提供了多种防护机制,如跨站点请求伪造(CSRF)防护、注入攻击防护等。

会话管理:提供了会话管理机制,如令牌管理、并发控制等。

监视与管理:提供了监视与管理机制,如访问日志记录、审计等。

Spring Security通过配置安全规则和过滤器链来实现以上功能,可以轻松地为Spring应用程序提供安全性和保护机制。

二、Spring Security的原理?


Spring Security是一个基于Spring框架的安全性认证和授权框架,它提供了全面的安全性解决方案,可以保护Web应用程序中的所有关键部分。

Spring Security的核心原理是拦截器(Filter)。Spring Security会在Web应用程序的过滤器链中添加一组自定义的过滤器,这些过滤器可以实现身份验证和授权功能。当用户请求资源时,Spring Security会拦截请求,并使用配置的身份验证机制来验证用户身份。如果身份验证成功,Spring Security会授权用户访问所请求的资源。


Spring Security的具体工作原理如下:

1.用户请求Web应用程序的受保护资源。

2.Spring Security拦截请求,并尝试获取用户的身份验证信息。

3.如果用户没有经过身份验证,Spring Security将向用户显示一个登录页面,并要求用户提供有效的凭据(用户名和密码)。

4.一旦用户提供了有效的凭据,Spring Security将验证这些凭据,并创建一个已认证的安全上下文(SecurityContext)对象。

5.安全上下文对象包含已认证的用户信息,包括用户名、角色和授权信息。

6.在接下来的请求中,Spring Security将使用已经认证的安全上下文对象来判断用户是否有权访问受保护的资源。

7.如果用户有权访问资源,Spring Security将允许用户访问资源,否则将返回一个错误信息。

三、有哪些控制请求访问权限的方法?


在Spring Security中,可以使用以下方法来控制请求访问权限:

permitAll():允许所有用户访问该请求,不需要进行任何身份验证。

denyAll():拒绝所有用户访问该请求。

anonymous():允许匿名用户访问该请求。

authenticated():要求用户进行身份验证,但是不要求用户具有任何特定的角色。

hasRole(String role):要求用户具有特定的角色才能访问该请求。

hasAnyRole(String... roles):要求用户具有多个角色中的至少一个角色才能访问该请求。

hasAuthority(String authority):要求用户具有特定的权限才能访问该请求。

hasAnyAuthority(String... authorities):要求用户具有多个权限中的至少一个权限才能访问该请求。

可以将这些方法应用于Spring Security的配置类或者在Spring Security注解中使用

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot是一个基于Spring框架的快速开发应用程序的工具,可以简化配置和开发过程。而Spring SecuritySpring框架的一个扩展模块,用于提供安全框架和身份认证,实现用户认证授权的常用操作。Spring BootSpring Security的结合,可以轻松实现应用程序的安全性。 Spring BootSpring Security结合的示例程序可以从官网和GitHub上获取。示例程序包括登录验证、用户授权管理等功能。在编写代码前,需要先增加Spring Security的依赖,并在配置文件中配置相关信息。例如,配置登录页面、禁用某些页面访问、设置账号密码等信息。配置完成后,编写控制器和视图,实现登录页面的显示并处理账号密码验证等操作。在完成这些基本操作后,还可以添加一些高级特性,如Remember-me、Session级别授权等等。 Spring BootSpring Security示例程序的好处在于它可以为初学者提供完整的代码示例,使学习者在实践中掌握Spring BootSpring Security结合的基本原理和操作方法。同时,示例程序还包含了许多安全问题的处理方法,如CSRF、XSS攻击等,对理解Web应用安全方面的知识也有帮助。总之,Spring BootSpring Security结合的示例程序是一个非常好的入门学习教程,适合Java、Web开发初学者使用。 ### 回答2: Spring Boot是一个用于构建微服务应用程序的框架,它使用了各种开箱即用的组件,可以使开发人员快速构建应用程序。而Spring Security则是Spring框架中负责安全认证授权的模块,可以为应用程序提供强大的安全保障。在实际应用开发中,Spring BootSpring Security常常一起使用,以提供更全面的解决方案。 为了展示Spring BootSpring Security的典型应用场景,我们可以考虑使用示例程序来介绍。对于Spring BootSpring Security的初学者来说,最好的方式就是借助示例代码来理解各种组件的作用和使用方法。 不同的示例程序涉及的应用场景也不同,例如常见的基于用户名密码认证、基于角色授权、集成社交账号登录等。这些示例程序可以帮助开发人员快速入门,同时也可以为开发者在实现自己的应用程序时提供参考和灵感。 总之,Spring BootSpring Security的示例程序为我们提供了一个学习、理解和应用这些技术的良好平台。希望我们可以通过学习这些示例程序,真正掌握并熟练运用Spring BootSpring Security技术栈,从而为我们的实际应用开发提供更全面的保障和支持。 ### 回答3: Spring Boot是一个Java开源框架,它用于创建基于Spring的应用程序。Spring Security则是一个用于处理认证授权的安全框架。Spring BootSpring Security的结合使用可以创建更加安全和可靠的Spring应用程序。 Spring BootSpring Security的结合使用示例需要完成以下步骤: 1. 配置Spring Boot依赖:在pom.xml文件中添加Spring BootSpring Security的依赖,包括spring-boot-starter-web和spring-boot-starter-security。 2. 配置Spring Security:在应用程序中使用注解和配置文件来配置Spring Security,例如通过@EnableWebSecurity注解开启Web安全,定义安全配置类。 3. 配置用户和角色:在应用程序中定义用户和角色,并将它们存储在数据库或内存中。同时,还需要为用户和角色分配权限。 4. 实现认证授权功能:在安全配置类中实现认证授权功能,例如使用Spring Security提供的form-based认证或基于HTTP认证方式。 5. 安全注解的使用:在应用程序的Controller层中使用Spring Security提供的注解来限制访问,例如使用@PreAuthorize来限制某些角色或权限才能访问某个路径。 综上所述,Spring BootSpring Security是一个可靠和安全的Java应用程序开发选项,并且可以在示例中结合使用,让开发人员实现更好的安全性和可靠性需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值