浏览 1958 次
锁定老帖子 主题:一种繁琐的SSH设计(三)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
action层要写strus-config.xml Define.xml validation.xml等 方法配置里面必须在ApplicationResources.properties LookupMethods.properties 还有spirng bean定义。太多了,繁琐。 还有我说一下关于此SSH定义中一些其他的东西: 登陆 用户 权限验证 :acegi 利用配置文件就可以完成用户的登陆和 权限的控制方便。 但是acegi缺点是 比较慢,并且如果在TOMCAT启动的时候有人进行登陆,那么就会造成权限丢失。不知道是我 配置的问题还是acegi的问题。 acegi配置:applicationContext-acegi.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener" /> <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter </value> </property> </bean> <!-- 根据session中存放的信息组装ContextHolder。ContextHolder主要用于存放SecureContext,包括用户的权限信息--> <bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"></bean> <!-- 处理认证请求(通常是一个登录页面的表单请求) --> <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="authenticationManager"> <ref bean="authenticationManager" /> </property> <property name="authenticationFailureUrl"> <value>/login.jsp?login_error=1</value> </property> <property name="defaultTargetUrl"> <value>/main.do?method=main</value> </property> <property name="filterProcessesUrl"> <value>/j_acegi_security_check</value> </property> <property name="rememberMeServices"><ref local="rememberMeServices"/></property> </bean> <!-- 匿名用户处理。如果用户尚未登录,将生成一个匿名用户的Authentication存放到ContextHolder中--> <bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter"> <property name="key"> <value>anonymous</value> </property> <property name="userAttribute"> <value>anonymousUser,AUTH_ANONYMOUS</value> </property> </bean> <!-- 认证管理器--> <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> <ref local="daoAuthenticationProvider" /> <ref local="anonymousAuthenticationProvider" /> <ref local="rememberMeAuthenticationProvider"/> </list> </property> <!--禁止同一帐号重复登陆系统(可选)--> <property name="sessionController"> <ref bean="concurrentSessionController" /> </property> </bean> <bean id="concurrentSessionController" class="org.acegisecurity.concurrent.ConcurrentSessionControllerImpl"> <property name="maximumSessions"> <value>1</value> </property> <property name="sessionRegistry"><ref local="sessionRegistry"/></property> </bean> <bean id="sessionRegistry" class="org.acegisecurity.concurrent.SessionRegistryImpl"/> <!-- 用于认证匿名用户--> <bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider"> <property name="key"> <value>anonymous</value> </property> </bean> <!-- 基于数据库的认证提供者,daoAuthenticationProvider主要功能是从数据库取出用户名和密码,判断登录信息是否正确,如果是,则取出用户权限等用户 信息,并且存放到cache中,以便以后再次使用。--> <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <property name="userDetailsService"> <ref local="userDetailsServiceHibernate" /> </property> <property name="userCache"> <ref bean="userCache" /> </property> <property name="passwordEncoder"> <ref bean="passwordEncoder" /> </property> </bean> <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder" /> <!-- 自定义userDetailsServiceHibernateImplTarget 检验用户合法性 --> <bean id="userDetailsServiceHibernateImplTarget" class="com.bidlink.acegi.UserDetailsServiceHibernate"> <property name="userDao"> <ref bean="userDao" /> </property> </bean> <bean id="userDetailsServiceHibernate" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>org.acegisecurity.userdetails.UserDetailsService</value> </property> <property name="interceptorNames"> <list> <idref bean="transactionInterceptor" /> <idref local="userDetailsServiceHibernateImplTarget" /> </list> </property> </bean> <!-- <bean id="userServiceTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="transactionAttributeSource"> <value>org.acegisecurity.userdetails.UserDetailsService.loadUserByUsername=PROPAGATION_REQUIRED</value> </property> </bean> --> <!-- 强制安全验证过滤器。验证所请求的url是否在用户的权限范围内.--> <bean id="securityEnforcementFilter" class="org.acegisecurity.intercept.web.SecurityEnforcementFilter"> <property name="filterSecurityInterceptor"> <ref local="filterInvocationInterceptor" /> </property> <property name="authenticationEntryPoint"> <ref local="authenticationProcessingFilterEntryPoint" /> </property> </bean> <!-- 配置登录界面信息--> <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl"> <value>/login.jsp</value> </property> <property name="forceHttps"> <value>false</value> </property> </bean> <!-- securityEnforcementFilter的作用主要是将http请求转发给filterSecurityInterceptor,由filterSecurityInterceptor来对HTTP请求的合法 性进行判断--> <bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"> <property name="authenticationManager"> <ref bean="authenticationManager" /> </property> <property name="accessDecisionManager"> <ref local="httpRequestAccessDecisionManager" /> </property> <property name="objectDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /login.jsp*=AUTH_ANONYMOUS,AUTH_USER /bidinfoaction.do?method?post=AUTH_ANONYMOUS,AUTH_USER /bidinfoaction.do?method?oppugn=AUTH_ANONYMOUS,AUTH_USER /1982456112aadsfad/datadts.do*=AUTH_ANONYMOUS,AUTH_USER /**=AUTH_USER</value> </property> </bean> <!-- 投票通过策略管理器 allowIfAllAbstainDecisions:设定是否允许:“没人反对就通过”的投票策略 decisionVoters:投票者 --> <bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"> <property name="allowIfAllAbstainDecisions"> <value>false</value> </property> <property name="decisionVoters"> <list> <ref bean="roleVoter" /> </list> </property> </bean> <!-- 投票者--> <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"> <property name="rolePrefix"> <value>AUTH_</value> </property> </bean> <bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"> <property name="rememberMeServices"> <ref local="rememberMeServices"/> </property> </bean> <bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> <property name="userDetailsService"><ref local="userDetailsServiceHibernate"/></property> <property name="key"><value>springRocks</value></property> </bean> <bean id="rememberMeAuthenticationProvider" class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider"> <property name="key"><value>springRocks</value></property> </bean> </beans> 利用的是集成接口出来自己写的Dao登陆,还有是单点多系统登陆。 关于全文检索lucene利用的是solr: 看大家在JAVAEYE中有很多利用solr的介绍,我也就不赘述了。 但是因为公司大约有40多人在这个系统上进行不间断的操作(一个人一天处理300-400条信息)。 为了保证实时性只能1分钟建立以此索引。后来solr确实撑不住这么频繁的文件操作,所以改成3分钟建立以此索引。 用solr的commit进行提交。 但是还是有问题,索引文件大约有5G的样子,每晚进行优化。还有经常报出来 内存溢出的问题。 附录:solr的服务器,2G内存分配给 tomcat1G spring 的后拦截问题: 不知道算不算spring 的BUG在,在利用spring的后拦截来处理,在保存文档到数据库的过程中,利用拦截把连接下来的model保存到全文检索中。但是如果文档保存数据库失败,拦截器仍然进行,在索引中保存造成数据库和检索不一致。 与其他系统的交互,与其他系统的交互很多,方式也不一样: 1.利用oracle定时处理,和存储过程直接进行数据库的复制和转移 2.利用RMI进行交互,这种交互基本是实时进行的 3.和PHP 和 ASP语言进行交互时,利用的form表单的post方法进行提交过来,在本系统中进行接收form表单。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |