Spring Security 体验
因为要做RBAC权限管理,查了一些资料,决定使用Spring Security,因为项目使用SSM做的,正好也想对Spring的相关框架有更多了解。
具体教程就不详细说了,网上有很多,自己也是参考了这篇博文
[spring security 登录、权限管理配置](http://www.voidcn.com/blog/rongku/article/p-5803970.html),主要记录下自己在实现过程中遇到的一些坑。
实现接口的时候使用@Autowired 不能注入bean。 我在applicationMVC.xml中扫描了service包和controller包,在实现Spring Security的接口的时候,比如UserDetailsService,FilterInvocationSecurityMetadataSource,使用@Autowired注解并不能注入各个bean,而在Controller里面是没有问题的,这个我也找了好久,但是没有弄明白。后来取消注解方式,又在applicationContext-security.xml中扫描了对应的service文件,使用property注入才解决问题。 表单提交url问题 开始使用的是自己写的url,用户名和密码一直提交不上去。百度之后说是/j_spring_security_check是spring security 表单提交的默认配置。还有用户名和密码,改成j_username和j_password才提交成功。 Spring Security接口实现 这个应该是遇到的最棘手的问题了,要了解各个接口的作用,这个网上也有很多文章具体说了,还要根据自己的数据设计具体实现代码。同时对Spring Security的执行过程要有一点了解,不然码起代码来也是云里雾里,参考了下面的文章: Spring Security 学习笔记(5)一个Http请求的具体执行过程 密码加密问题 在applicationContext-security.xml中,配置了密码md5加密, xml <beans:bean id="encoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder"></beans:bean> <authentication-manager alias="myAuthenticationManager"> <authentication-provider user-service-ref="myUserDetailServiceImpl"> <password-encoder ref="encoder" /> </authentication-provider> </authentication-manager>
但是数据库中的密码是明文存储的,所以登录的时候即便输入密码正确也不会登录成功。这个是自己没有注意,结果弄了半天,程序没有报错,就看控制台的信息,好不容易才看见一条信息说密码匹配不正确,这才发现问题。 还有一些其他问题就不一一说了,主要还是对spring security不太了解造成的,熟悉了之后才发现这些问题其实并不难解决。