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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值