《Spring Security教程系列》三.HttpSecurity的使用

HttpSecurity

到目前为止我们的 SecurityConfig 只包含了关于如何验证我们的用户的信息。Spring Security怎么知道我们想对所有的用户进行验证?Spring Security怎么知道我们需要支持基于表单的验证?原因是我们的SecurityConfig类继承的WebSecurityConfigurerAdapter在 configure(HttpSecurity http) 方法提供了一个默认的配置,看起来和下面类似:


protected void configure(HttpSecurity http) throws Exception {

    http

        .authorizeRequests()

            .anyRequest().authenticated()

            .and()

        .formLogin()

            .and()

        .httpBasic();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

上面的默认配置说明:

确保我们应用中的所有请求都需要用户被认证

允许用户进行基于表单的认证

允许用户使用HTTP基本验证进行认证

你可以看到这个配置和下面的XML命名配置相似:


<http>

    <intercept-url pattern="/**" access="authenticated"/>

    <form-login />

    <http-basic />

</http>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

authorizeRequests(),formLogin()、httpBasic()这三个方法返回的分别是ExpressionUrlAuthorizationConfigurer、FormLoginConfigurer、HttpBasicConfigurer,他们都是SecurityConfigurer接口的实现类,分别代表的是不同类型的安全配置器。

总的来说:HttpSecurity是SecurityBuilder接口的一个实现类,从名字上我们就可以看出这是一个HTTP安全相关的构建器。当然我们在构建的时候可能需要一些配置,当我们调用HttpSecurity对象的方法时,实际上就是在进行配置。

配置的最终结果是什么?

基本上每个SecurityConfigurer子类都对应一个或多个过滤器 
可见ExpressionUrlAuthorizationConfigurer、FormLoginConfigurer、HttpBasicConfigurer三个配置器对应的Filter分别是FilterSecurityInterceptor、UsernamePasswordAuthenticationFilter、BasicAuthenticationFilter。

而HttpSecuirty内部维护了一个Filter的List集合,我们添加的各种安全配置器对应的Filter最终都会被加入到这个List集合中。

配置表单登录

protected void configure(HttpSecurity http) throws Exception {

             http

                  .authorizeRequests()

                        .anyRequest().authenticated()

                        .and()

                  .formLogin()

                        .loginPage( "/login")// 1

                        .permitAll();      //  2

      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

1、更新后的配置,指定了登录页面的位置 
2、我们必须允许所有的用户,不管是否登录,都可以访问这个页面。 formLogin().permitAll()允许所有用户访问这个页面。

可以自定义用户名和密码的参数名,但是无法修改POST方法请求/login这个URL


.formLogin()

   .loginPage( "/login")

    .usernameParameter("uname")//自定义用户名参数名称

   .passwordParameter("pwd")//自定义密码参数名称
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值