Spring Security 框架(面试题)

Spring Security 框架基础知识问答

  • Spring Security框架主要解决了什么问题?

    • 主要解决认证和授权的相关问题
  • BCrypt算法的主要特点是什么?

    • BCrypt算法是用于对密码加密处理的算法,可以实现编码、验证,并且BCrypt算法默认使用可随机盐值即,即使使用的相同的原文,每次编码产生的密文都是不同的,而且BCrypt算法是慢速的,可以非常有限的避免穷举式的暴力破解
  • UUID的主要特点是什么?
    1.能够保证在同一时空的唯一性
    2.经由一定的算法机器生成
    3.非人工指定.非人工识别

  • 在继承了WebSecurityConfigurerAdapter的配置类中,重写void configurer(HttpSecurity http)方法

    • http.formLogin()方法的作用是什么?
      如果不重写的话,会supper 父类当中的configure(http)的方法,这个父类的方法设置的是所有请求都不需要通过认证,
      可以直接访问.重写此方法,单独设置一个白名单(可以通过认证的url),以适应特定化需求
      开启表单验证,如果已开启,当请求被视为未认证是,将重定向到登录表单页面,如果未开启,党请求被视为未认证是,将相应403

    • 配置请求认证的过程中,调用的mvcMatchers()方法的作用是什么?
      配置某些路径,需要配置和后续的某个方法一起使用,例如 parmitall()或者authenticated()等

    • 配置请求认证的过程中,调用的permitAll()方法的作用是什么?
      此方法默认的是可不通过认证即可访问,当设置了mvaMachers()方法时,即配置的路径不需要通过认证

    • 配置请求认证的过程中,如果某个路径被多次匹配,最终此路径的规则是什么?
      以第1次配置的为准

    • http.csrf().disable()的作用是什么?
      防止伪造跨域攻击的禁用

  • UserDetailsService的作用是什么?

    • 默认情况下 Spring Security 框架提供了默认的用户名和启动时UUID生成的随机密码,如果需要自定义账号登录
      便需要重写UserDetailsService当中的loadUserByUsername(String username)方法,重写后,便不再生成UUID
  • 如何得到AuthenticationManager对象?

    • 在继承了WebSecurityConfigurerAdapter的配置类中,重写authenticationMannagerBean()方法,在此方法上添加@Bean
      注解即可,后续,当需要使用此对象时,使用自动装配机制即可.
  • 当调用AuthenticationManager对象的authenticate()方法后,会发生什么?此方法的返回结果是什么?

    • 调用了authenticate()方法后,Spring Security 会开始执行认证,会通过参数中的用户名来调用UserDetailsService接口类型的对象loadUserByUsername()方法,当得到了此方法的返回结果后,自动执行后续的判断,例如密码是否匹配,账号是否被禁用等如果通过认证,会返回Authentication接口类型的对象,此对象通常有三大组成部分,分别是Pincipal(当事人),Credentials(凭证),Authorities(权限清单),其中,Principal就是loadUserByUsername()方法返回的结果.
  • Spring Security如何判定某个请求是否已经通过认证?

    • 依据SecurityContext(Security上下文)中的认证信息(Authentication)来判定当前是否已经通过认证
  • 相比Session机制,JWT最大的优点是什么?

    • JWT(JSON WEB TOKEN)是一种JSON格式来组织数据的token ,不需要占用太多的内存空间,可以长时间保存用户信息
  • 在Spring Security的配置类的void configurer(HttpSecurity http)方法中,http.cors()的作用是什么?

    • 启用Spring Security的CorsFilter过滤器,此过滤器可以对复杂请求的预检放行
  • 根据业内惯用的作法,客户端应该如何携带JWT数据向服务器提交请求?

    • 客户端应该通过请求头中的authorization属性携带jwt
  • 在服务器端,为什么要使用过滤器而不是其它组件来解析JWT?

    • 过滤器是 Java EE 体系中最早接收到请求的组件,由于若干个不同的请求都需要识别客户端的身份,所以,应该通过能够统一处理的组件来处理jwt,同时,此项任务必须在Spring Security的过滤器处理认证授权,检查上下文之前执行,所以,此项任务只能通过自定义过滤器处理
  • 在服务器端,JWT过滤器的主要作用是?

    • 获取客户端携带的jwt,解析客户端携带的jwt,如果携带的是有效信息,则应该从中获取用户信息,用于创建认证信息(Authentication),并返回认证信息到Security上下文中
  • 如果客户端提交的请求没有携带JWT,服务器端的JWT过滤器应该如何处理?

    • 直接放行,交给其他组件进行处理
  • 在Spring Security的配置类的void configurer(HttpSecurity http)方法中,为什么要通过http.addFilter()系列方法添加JWT过滤器?

    • 保证jwt过滤器在Spring Security 的过滤器之前执行,通过该系列方法装配JWT过滤器到框架中
  • 在服务器端,控制器处理请求时,如何获取当事人信息?

    • 在处理请求的方法的参数列表中,使用@AuthenticationPrincipal注解,添加在当事人类型的参数上当事人的类型,就是Secuirity上下文中Authentication对象的当事人类型
  • 在服务器端,如何配置方法级别的权限?

    • 添加@EnableGlobalMethodSecurity在配置类上添加@EnableGlobalMethodSecurity(prePostEnabled = true)注解,这是一次性配置
      在方法上(通常是处理请求的方法上)使用@PreAuthorize注解来配置权限规则
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一些经典的 Spring Security 面试题: 1. 什么是 Spring SecuritySpring Security 是一个基于 Spring 框架的安全框架,用于实现身份验证和授权功能。 2. Spring Security 的主要功能是什么? Spring Security 的主要功能包括身份验证、授权、记住我、注销、会话管理和 CSRF 防护等。 3. Spring Security 中的认证和授权有什么区别? 认证是验证用户的身份,确保用户是谁。授权是确定用户是否有权执行某个操作或访问某个资源。 4. Spring Security 中的角色和权限有什么区别? 角色是用户的职能或职位,而权限是用户能够执行的操作或访问的资源。 5. Spring Security 中的过滤器链是什么? Spring Security 中的过滤器链是一系列的过滤器,在请求进入应用程序之前对请求进行处理和验证。这些过滤器可以使用配置文件进行配置和定制。 6. Spring Security 中的记住我功能是什么? 记住我功能允许用户在关闭浏览器后仍然保持登录状态,这通常通过在用户浏览器中存储一个持久化的 cookie 实现。 7. Spring Security 中的 CSRF 防护是什么? CSRF 防护是一种保护应用程序免受跨站点攻击的机制,它通过在每个表单中包含一个随机生成的 token 来实现。 8. Spring Security 中的密码加密是如何实现的? Spring Security 使用 BCryptPasswordEncoder 类来实现密码加密和解密,它使用 bcrypt 加密算法来生成加密后的密码。 9. Spring Security 中的会话管理是什么? 会话管理是一种管理用户会话的机制,它可以确保用户在登录后访问应用程序的每个页面时都需要进行身份验证。 10. Spring Security 中的注销是什么? 注销是一种允许用户安全地退出应用程序的机制,它会清除用户的会话信息并将用户重定向到登录页面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值