读书人

Spring security - Acegi一部分配置信

发布时间: 2012-11-09 10:18:48 作者: rapoo

Spring security --- Acegi部分配置信息

认证处理过滤器authenticationProcessingFilter的配置

    < bean id = "authenticationProcessingFilter" class = "org.acegisecurity.ui.webapp.AuthenticationProcessingFilter" > < property name = "filterProcessesUrl" value = "/j_security_check" /> < property name = "authenticationFailureUrl" value = "/index.jsp?login_error=1" /> < property name = "defaultTargetUrl" value = "/main.do" /> < property name = "authenticationManager" ref = "authenticationManager" /> < property name = "rememberMeServices" ref = "" /> <!-可选-- > </ bean > 说明: 1)负责处理基于表单的身份验证请求。 2)当接收到与filterProcessesUrl所定义相同的请求时,它会首先通过AuthenticationManager来验证用户身份。如果验证成功,则重定向到defaultTargetUrl所定义的成功登陆页面。如果验证失败,则再从rememberMeServices中获取用户身份。若再获取失败,则重定向到auhenticationFailureUrl所定义的登陆失败页面。 3)filterProcessesUrl:默认值为/j_acegi_security_check。该值必须与登录页面form的action值一致。 form中输入用户名的input控件的name必须为j_username;输入密码的input控件的name必须为j_password。 4)rememberMeServices负责通过以cookie的形式保存先前的用户登录信息。在Authentication对象不存在时,rememberMeProcessingFilter会调用rememberMeServices的autoLogin()方法,尝试在cookies中获取用户登录信息,如果存在则返回Authentication对象。在每次用户登录时,如果设置了RememberMe功能,在验证用户身份成功后,则会调用loginSuccess()方法记录用户信息在cookies中,否则调用loginFail()方法清除cookie。

认证管理器authenticationManager的配置

    < bean id = "authenticationManager" class = "org.acegisecurity.providers.ProviderManager" > < property name = "providers" > < list > < ref local = "daoAuthenticationProvider" /> < ref local = "anonymousAuthenticationProvider" /> </ list > </ property > </ bean > 说明: 1)认证管理器用来管理身份验证提供者。它将验证的功能委托给多个Provider,并通过遍历Providers,以保证获取不同来源的身份认证,若某个Provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的Authentication对象,否则会抛出一个AuthenticationException。 2)无论成功与否,认证管理器都会发布一个ApplicationEvent事件对象。

身份验证提供者的配置

    < bean id = "daoAuthenticationProvider" class = "org.acegisecurity.providers.dao.DaoAuthenticationProvider" > < property name = "userDetailsService" ref = "userDao" /> < property name = "userCache" ref = "userCache" /> < property name = "passwordEncoder" ref = "passwordEncoder" /> <!-可选-- > </ bean > < bean id = "anonymousAuthenticationProvider" class = "org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider" > < property name = "key" value = "anonymous" /> </ bean > < bean id = "userDao" class = "com.cjm.web.dao.impl.UserDaoImpl" > < property name = "sessionFactory" ref = "sessionFactory" /> </ bean > < bean id = "userCache" class = "org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache" > < property name = "cache" > < bean class = "org.springframework.cache.ehcache.EhCacheFactoryBean" > < property name = "cacheManager" > < bean class = "org.springframework.cache.ehcache.EhCacheManagerFactoryBean" /> </ property > < property name = "cacheName" value = "userCache" /> </ bean > </ property > </ bean > < bean id = "passwordEncoder" class = "org.acegisecurity.providers.encoding.Md5PasswordEncoder" /> 说明: 1)daoAuthenticationProvider:负责提供用户信息,包括用户名和密码。其中取用户名密码的工作交给userDetailsService来做。 2)anonymousAuthenticationProvider:匿名用户身份验证。 3)userDao:用于在数据库中获取用户信息。UserDaoImpl需要实现Acegi 提供的UserDetailsService接口类。 4)userCache:缓存用户和资源相对应的权限信息。每当请求一个受保护资源时,daoAuthenticationProvider就会被调用以获取用户授权信息。如果每次都从数据库获取的话,那代价很高,对于不常改变的用户和资源信息来说,最好是把相关授权信息缓存起来。 5)passwordEncoder:使用加密器对用户输入的明文进行加密。Acegi 提供了三种加密器: PlaintextPasswordEncoder---默认,不加密,返回明文 ShaPasswordEncoder---哈希算法(SHA)加密 d5PasswordEncoder---消息摘要(MD5)加密

读书人网 >软件架构设计

热点推荐