SPRING SECURITY JAVA配置:可读性

这篇文章,我会介绍如何让Spring Security Java配置的可读性更高。这篇文章详细阐述了”Spring Security Java Config Preview: Web Security“中的如下观点:

格式化我们的Java配置代码,可读性将更强。它和XML命名规则类似,”and()”等同于XML命名空间中的结束元素。

缩进

Spring Security的Java配置的缩进对可读性有很大的影响。我们应该更多的使用缩进。从更高的层次来看,应该看起来是这样:

builder
  #1 I modify builder
      I modify #1
      I also modify #1
      I also modify #1
      and
  #2 I also modify builder
      I modify #2
      I also modify #2
      and
  #3 I also modify builder
      I modify #3
  ...

具体的例子,请看以下的代码:

http
    // #1
    .formLogin()
        // #2
        .loginUrl("/login")
        .failureUrl("/login?error")
        // #3
        .and()
    // #4
    .authorizeUrls()
        // #5
        .antMatchers("/signup","/about").permitAll()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated();
  • #1 formLogin更改了http对象本身。formLogin相对于http进行了缩进(就像XML中相对于缩进一样)。
  • #2 loginUrl和failureUrl更高了formLogin的配置。例如如果需要用户登陆的话,loginUrl决定了Spring Security跳转到哪个页面。所以loginUrl和failureUrl都是formLogin的子节点。
  • #3 “and”表示我们已经配置完了父节点了(这里是formLogin),同时下一行将减少缩进。你可以将整体看作成是http由formLogin和authorizeUrls来进行配置。如果你没有其它要配置了,就不需要用“and”。
  • #4 我们在这里减少的缩进是因为authorizeUrls和基于表单的登陆无关。它的作用是限制多个URL的访问。
  • #5 每个antMatchers和anyRequest都更改了authorizeUrl的验证要求。所以它们都是authorizeUrls的子节点。

IDE的格式化工具

缩进可能和IDE的格式化工具配合不好。许多IDE都能让开发者对选中的代码块禁用格式化功能。例如在STS/Eclipse中,你可以使用@formatter:off和@fommatter:on来关闭或者开启格式化功能。看下面的代码:

// @formatter:off
http
    .formLogin()
        .loginUrl("/login")
        .failureUrl("/login?error")
        .and()
    .authorizeUrls()
        .antMatchers("/signup","/about").permitAll()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated();
// @formatter:on

要使上面的代码能够正确运作,你需要进行如下配置:

  • Preferences -> Java -> Code Style -> Formatter
  • 点击”Edit”
  • 选中”Off/On Tags”栏
  • 确保“Enable Off/On tags”被选中了
  • 你也可以更改开启和关闭格式化功能的字符
  • 然后点OK

对比XML命名空间

缩进将Java配置和XML命名空间配置联系起来。虽然有时候并不一定完全对等,但大多数情况下都是有效的。让我们来比较一下两者吧:

http
    .formLogin()
        .loginPage("/login")
        .failureUrl("/login?error")
        .and()
    .authorizeUrls()
        .antMatchers("/signup","/about").permitAll()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated();

XML配置虽然不对等,但很类似,请看下面的XML配置代码。我们注意到,两者之间的差别主要是因为Java配置和XML配置的默认值不同。

<http use-expressions="true">
  <form-login
      login-page="/login"
      authentication-failure-url="/login?error"
  /> <!-- similar to and() -->
  <intercept-url pattern="/signup" access="permitAll"/>
  <intercept-url pattern="/about" access="permitAll"/>
  <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
</http>

我们注意到http和非常相似。唯一的差别是Java配置使用“authorizeUrls”来表示use-expressions=”true”。而formLogin和

也很类似,formLogin的每一个子节点都是XML的的属性。这种相似性也是非常合理的,因为XML也更改了XML元素,所以子节点更改了母节点。

formLogin下的and等同于XML的结束符。
authorizeUrls的子节点等同于。

总结

你应该已经知道如何缩进Spring Security的Java配置代码了。缩进将会帮助你写出可读性更高的代码,也更容易从XML配置转换成Java代码,反之亦然。

原文链接: Springsource 翻译: ImportNew.com - 唐小娟
译文链接: http://www.importnew.com/5981.html
[ 转载请保留原文出处、译者和译文链接。]

关于作者: 唐小娟

一名在路上的程旭媛

查看唐小娟的更多文章 >>



相关文章

发表评论

Comment form

(*) 表示必填项

还没有评论。

跳到底部
返回顶部