经过几天的努力终于将acegi成功配好了。我使用的是acegisecurity-1.0.7,可以到http://acegisecurity.org下载最新版。
首先在Web.xml中添加
applicationContext-acegi.xml
如果concurrentSessionController的exceptionIfMaximumExceeded属性设置为true,么一旦并发HttpSession数量超过限额,将会重定向到expiredUrl指定的路径。exceptionIfMaximumExceeded一般设置为false. 为true时, 如果已有一个该用户登录了,那么在另一个地方登录该用户将抛出异常 如果设置为false, 那么, 如果已有一个该用户登录了系统, 那么在另一个地方也可以登录,登录后前者会被逼退出系统。
设置一个安全上下文。其中HttpSessionIntegrationFilter适用于大多数情形。它将Authentication对象保存在HTTP会话中,使之能够跨越多个请求。
在做认证时可以从数据库中读取帐号密码,关键在<bean id="SecurityUserDetailService" class="com.jlcatvum.web.dao.SecurityUserDetailService">
<property name="usersByUsernameQuery">
<value>?</value>
</property>
</bean>这个SecurityUserDetailService就是读取自己数据库的bean。
这是SecurityUserDetailService的代码
在filterInvocationInterceptor过滤器里设好资源的权限后,就能够在没有登录的情况下访问资源时跳转到登录界面。当然在后面异常处理的过滤器中要指定跳转的页面。
最后就是异常处理和注销处理,没什么特别照例子做就行。只是要指定出现异常时要制定的页面。