整合Acegi使用HTTPS安全通道(SSL)
首先在你使用application server上激活SSL,让项目能使用HTTPS。
下面以我使用的tomcat为例(其实网上也很多了,再啰嗦一遍方法):
1、生成及导入证书。
生成keystore
keytool -genkey -alias projectName -keypass changeit -storepass changeit -keyalg RSA -validity 3600 -dname "CN=127.0.0.1, OU=HOME, O=HOME" -keystore my.keystore
导出证书
keytool -export -alias projectName -file foo.cer -keystore my.keystore
导入证书到cacerts(注意该cacerts确保是你application server所使用的JDK的)
keytool -import -alias projectName -keystore cacerts -file foo.cer -trustcacerts
2、配置tomcat的 server.xml文件。
大概找到下面注释的一行。
留意changeit字段,需要跟之前生成证书时输入的密码一致。
3、重启tomcat。
测试 https://localhost:8443 是否访问正常。
让项目同时使用http和https
完成以上操作后,项目已经可以使用SSL来访问了,但也众所周知SSL之所以安全性比较高因为使用安全通道加密的缘故。所以原来http的一个请求和响应在https里面都变成几个,资源消耗大很多。所以我们有时候仅仅是为了一些资源使用https足以,并不是全部。
如果你是使用Acegi(spring security)的话,集成将非常简单。
具体配置如下:
打开acegi的配置文件。
1、找到exceptionFilter一段,具体代码如下:
3、配置ChannelProcessingFilter,让我们仅对需要的SSL的资源使用https。
(例子中为访问/admin/**资源的的时候必须使用https,若用http访问的时候也会直接转到https通道。其他资源可使用https也可以使用http。)
顾名思义:
REQUIRES_SECURE_CHANNEL 为使用https
REQUIRES_INSECURE_CHANNEL 为使用http
/** 注意请务必放在最后
另:请注意项目中的url地址,因为如果在https链接当中访问http资源的话,某些时候会出现问题,例如获取session和request之类的时候,实质上是从https进行了Redirect,而且还是那比较难查错。
使用acegi的话,应该配置过FilterSecurityInterceptor,相信格式也很熟悉了吧。
4、勿忘在FilterChainProxy添加新的filter
注意添加上channelProcessingFilter即可。
至此,已经可以享受Acegi在安全性上给我们带来的便利以及乐趣。
但实话说,有些情况下使用Acegi却带来很多的麻烦,或者是必须深入了解,不然扩展性和易用性还是有限。