Spring Security 的ChannelProcessingFilter 使用https请求

7.4.6  确保一个安全的通道

字母“s”是Internet上最重要的字母。任何一个在Web上冲浪超过五分钟的人都知道绝大多数Web页面均与以“http://”打头的URL相关联。那是因为绝大多数Web页面都通过HTTP协议被请求和发送。

对于绝大多数页面来说,HTTP完全够用,但是当有秘密信息在Internet上四处传输时就不够用了。通过HTTP发送的信息很容易被无法无天的黑客截获和读取,并被用于他们的恶意计划。

当信息必须秘密地被发送时,字母“s”就开始起作用了。对于那些页面,你会发现相应的URL以“https://”而不只是“http://”开头。对于HTTPS,信息仍然使用HTTP发送,但是在另一个端口上发送,而且被加密,那样的话,如果它们被拦截了,任何非预定的人都将无法读取它们。
令人遗憾的是,HTTPS的问题是必须确保通过HTTPS传送的页面属于指向该安全页面的链接的编写者。换句话说,对于一个要用加密的HTTPS保护的页面来说,它必须使用一个以“https://”打头的URL进行链接。没有那个字母“s”,该页面便将不加密地在HTTP上发送。

由于这个至关重要的“s”特别容易被遗漏,因此Spring Security提供了一种十分简单的方式来确保某些页面使用HTTPS进行传送,而不管使用了哪种URL来链接到它们。如图7.14所示,ChannelProcessingFilter是一种Spring Security过滤器,它拦截某一请求,查看它是否需要被保护,如果是,就通过将该请求重新定向至原始请求URL的HTTPS格式来让“s”起作用。

  
(点击查看大图)图7.14  ChannelProcessingFilter把HTTP请求重新定向为HTTPS
(以及反过来),为每一个请求确保适当的安全性。

我们已经像下面那样,在roadrantz-security.xml文件中,为RoadRantz应用程序配置了一个ChannelProcessingFilter:

 

这里的filterInvocationDefinitionSource属性被配置来告诉ChannelProcessingFilter哪些页面应该使用HTTPS进行保护,以及哪些不应该进行保护。它被配置为一个或者是多个被映射为将保护或不保护的URL模式。

但是在这些URL出现之前,我们必须为如何处理那些URL设置一些基本法则。第一行包含CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON,用于告诉Spring Security在与随后的URL模式进行比较之前,先标准化所有的URL。第二行包含PATTERN_TYPE_APACHE_ANT,那表明随后的URL模式都将使用Apache Ant样式路径进行呈现。

随后的每一行都将一个URL模式映射到它的安全要求上。在RoadRantz应用程序中,登录页面必须被保护(那样才没人能够截取用户的密码)。因此,/login.htm被映射到REQUIRES_SECURE_CHANNEL,表明它应该通过HTTPS进行发送。同样,发送给处理登录的URL的信息也必须被加密。正如读者很快将会看到的那样,Spring Security的AuthenticationProcessingFilter负责/j_acegi_security_check,因此这个URL模式也被设置为REQUIRES_SECURE_CHANNEL。

RoadRantz应用程序中的其他页面都不要求加密,因此“/**”URL模式(在Ant路径语法中,这表示所有URL)被设置为REQUIRES_INSECURE_CHANNEL,指定其他所有页面必须通过平常的、非安全的HTTP发送。注意,这些页面要求一个非安全的通道。那意味着如果这些页面被通过HTTPS进行访问,那么ChannelProcessingFilter将会把它们重新定向为通过HTTP进行发送。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值