刚开始研究spring security3.x,未入门径,看了一些文档版本不详,黑暗中继续摸索。
偶见spring-security3官方demo中的spring-security-samples-tutorial,可在tomcat中直接运行。想以此为基点,向项目中做初步迁移。
引入的包,spring-security-taglibs.jar,spring-security-web.jar,spring-security -core.jar,spring-config.jar. 这些开发包包含在spring-security3.x中需要从官网独立下载. 看网上各路资料以为spring包中有,找了很久才发现,特此强调一下。然后是web包中加入同样的内容,按照demo的位置加入application -business.xml和application-security.xml文件,保留xml头 去掉内容。运行测试,发现application-security.xml缺少一些必要的配置,补充
<http auto-config='true'>
</http>
<authentication-manager>
<authentication-provider>
<password-encoder hash="md5"/>
<user-service>
<user name="rod" password="a564de63c2d0da68cf47586ee05984d7" authorities="ROLE_SUPERVISOR, ROLE_USER, ROLE_TELLER" />
<user name="dianne" password="65d15fe9156f9c4bbffd98085992a44e" authorities="ROLE_USER,ROLE_TELLER" />
<user name="scott" password="2b58af6dddbd072ed27ffc86725d7d3a" authorities="ROLE_USER" />
<user name="peter" password="22b5c9accc6e1ba628cedc63a72d57f8" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
运行通过。后面就是修改了,继续翻文档。
参考了Spring Security 2 配置精讲 的内容,比较详细,不过还是无法领悟未能直接通过配置注入权限。
在family168 看到一个AuthenticationExample的例子,完全跳过各种配置手动插入了权限进去,拿来一试,居然就成功了。考虑到其他的方法侵入性也不小,不如还是手写方便。现在为止迁移的结果:登录界面无须任何修改,struts配置无须修改,web.xml增加部分内容,application-service.xml简单配置,增加一个类RoleAuthenticationManager实现AuthenticationManager,修改登录action,在获取用户信息后注入权限
AuthenticationManager am = new RoleAuthenticationManager("ROLE_USER","ROLE_ADMIN"); Authentication req = new UsernamePasswordAuthenticationToken(username, password); SecurityContextHolder.getContext().setAuthentication(am.authenticate(req));