- 浏览: 929164 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
ldap与Acegi? ----Acegi配置文件解剖
这两个之间没什么必然的联系吧?ldap不熟悉,Acegi更是不熟悉.呵呵,这两个再搅和在一起就乱了.
ldap好像是与数据库连接相关的一个东东,那它与现在常见的数据库连接JDBC有什么区别?与JNDI呢?与这两个比又有什么优势?这个优势又怎么暗合了Acegi的需求?
对于Acegi只知道它是与Spring协作很好的一个Security框架,先不说Security别的方面,现在只看它如何管理登录这块,登录肯定是要访问数据库,那么在Acegi的配置文件中又是怎么来体现管理这个访问数据库的呢?
仔细研究项目中定义的applicationContext-acegi-secutiry.xml文件,这里面配置了如下的几个Bean:
1,filterChainProxy -->org.acegisecurity.util.FilterChainProxy
property: filterInvocationDefinitionSource,其值有:
CONVERT_URL_TOLOWERCASE_BEFORE_COMPARISON
PATTEN_TYPE_APCHE_ANT
/**=httpSessionContextIntegrationFilter, logoutFilter,authenicationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
?**
这么一长串是参数是干啥的,filterInvocationDefinitionSource是个什么类型?
看了一下它的源代码,其类型为:FilterInvocationDefinitionSource,那么这个类型怎么又会接收上面那么长的字符串?
再看FilterInvocationDefinitionSource的源代码,它是个接口,这下更惨了,FilterChainProxy初始化调用set时怎么又会初始化一个接口?内部匿名类?
先往下看.........
?
2,httpSessionContextIntegrationFilter -->org.acegisecurity.context.HttpSessionContextIntegrationFilter. 这个类没有属性可配.
3,logoutFilter -->org.acegisecurity.ui.logout.LogoutFilter
通过<constuctor-arg>配置了value="/index.htm".
又通过<constructor-arg>配置了 一个List其值为:
<ref bean = "remeberMeServices">?????????????????????????????????
和<bean class = "org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
4,authenicationProcessingFilter --> org.acegisecurity.ui.webapp.AuthenticationProcessingFilter
六个property:
authenticationManager ref authenticationManager ??????????????????????????
authenticationFailureUrl value="/jsp/accessDenied.jsp"
alwaysUseDefaultTargetUrl value = "true"
defaultTargetUrl value="/pages/content.html"/
filterProcessesUrl value="/jsp/j_acegi_security_check" ???????这个好像很关键的.
rememberMeServices ref="rememberMeServices" ???????????????????
5,securityContextHolderAwareRequestFilter --> org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter 没任何属性可配.
6,rememberMeProcessingFilter --> org.acegisecurity.ui.rememberme.RememberMeProcessingFilter
两个属性:
authenticationManager ref="authenticationManager" ???????????????????
rememberMeServices ref="rememberMeServices" ??????????????????
7,anonymousProcessingFilter --> org.acegisecurity.providers.anonymous.AnonymousProcessingFilter
两个属性:
key value="changeThis"
userAttribute value="anonymousUser,ROLE_ANONYMOUS"
8,exceptionTranslationFilter --> org.acegisecurity.ui.ExceptionTranslationFilter
两个属性:
<property name="authenticationEntryPoint">
<bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/jsp/login.jsp"/>
<property name="forceHttps" value="false"/>
</bean>
</property>
<property name="accessDeniedHandler">
<bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/jsp/accessDenied.jsp"/>
</bean>
</property>
9,filterInvocationInterceptor --> org.acegisecurity.intercept.web.FilterSecurityInterceptor
三个属性:
authenticationManager ref="authenticationManager" ???????????????????????
<property name="accessDecisionManager">
<bean class="org.acegisecurity.vote.AffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false"/>
<property name="decisionVoters">
<list>
<bean class="org.acegisecurity.vote.RoleVoter"/>
<bean class="org.acegisecurity.vote.AuthenticatedVoter"/>
</list>
</property>
</bean>
</property>
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/jsp/login.jsp=ROLE_ANONYMOUS
/jsp/**=ROLE_MPIXTOOLGROUP
</value>
</property>
10, rememberMeServices --> org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices
两个属性:
<property name="userDetailsService" ref="userDetailsService"/> ????????????
<property name="key" value="changeThis"/>
11, authenticationManager --> org.acegisecurity.providers.ProviderManager
一个属性:
<property name="providers"> ????????难道说这可就是登录信息的验证来源?providers嘛.
<list>
<!-- To Disable LDAP, comment out ldapAuthProvider reference below -->
<ref local="ldapAuthProvider"/>
<ref local="daoAuthenticationProvider"/>
<bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
<property name="key" value="changeThis"/>
</bean>
<bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<property name="key" value="changeThis"/>
</bean>
</list>
</property>
12, daoAuthenticationProvider --> org.acegisecurity.providers.dao.DaoAuthenticationProvider
一个属性:
<property name="userDetailsService" ref="userDetailsService"/>
13, userDetailsService --> org.acegisecurity.userdetails.memory.InMemoryDaoImpl
一个属性:
<property name="userMap">
<value>
jklaassen=4moreyears,ROLE_ADMIN
test=test,ROLE_MPIXTOOLGROUP ?????????????这是静态的验证,没有去数据库里查用户和密码吗?
devteam=get2work,ROLE_MPIXTOOLGROUP
jgaerlan=1234,ROLE_MPIXTOOLGROUP
opts=opts,ROLE_OPERATIONS
</value>
</property>
注意下面有一段配置被注释掉了: ??????????????这个是要到数据库里查找吧?
<!--
<bean id="userDetailsService" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="usersByUsernameQuery">
<value>{call dbo.MLab_User_GetInfoByUserName(?)}</value>
</property>
<property name="authoritiesByUsernameQuery">
<value>{call dbo.MLab_UserRole_GetInfoByID(?)}</value>
</property>
</bean>
-->
14, initialDirContextFactory --> org.acegisecurity.ldap.DefaultInitialDirContextFactory
其配置如下:
<constructor-arg value="ldap://dc03:389/OU=Employees,OU=Pleasanton,dc=kittyhawk,dc=funmail,dc=com"/>
<property name="managerDn">
<value>cn=mpixtool,OU=Employees,OU=Pleasanton,dc=kittyhawk,dc=funmail,dc=com</value>
</property>
<property name="managerPassword">
<value>p@55w0rd</value> ??????????????????这个密码并没有用到呀,而是用test的
</property>
15, userSearch --> org.acegisecurity.ldap.search.FilterBasedLdapUserSearch ?????????这个来负责登录用户的验证?
<constructor-arg index="0">
<value></value>
</constructor-arg>
<constructor-arg index="1">
<value>sAMAccountName={0}</value>
</constructor-arg>
<constructor-arg index="2">
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="searchSubtree">
<value>true</value>
</property>
16, ldapAuthProvider --> org.acegisecurity.providers.ldap.LdapAuthenticationProvider
<constructor-arg>
<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="userSearch">
<ref local="userSearch"/>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<constructor-arg>
<value></value>
</constructor-arg>
<property name="groupRoleAttribute">
<value>cn</value>
</property>
<property name="rolePrefix">
<value>ROLE_</value>
</property>
<property name="convertToUpperCase">
<value>true</value>
</property>
<property name="defaultRole">
<value>IS_AUTHENTICATED_FULLY</value>
</property>
</bean>
</constructor-arg>
一共配置了16个Bean,
filterChainProxy引用的Bean有:
--httpSessionContextIntegrationFilter,上面标号的第2个Bean.
--logoutFilter,上面标号的第3个Bean.
----这个logoutFilter引用的有:
------ rememberMeServices(标号为10)
--------这个rememberMeServices引用的有:
----------userDetailsService(标号为13)
--authenicationProcessingFilter, 上面标号的第4个Bean.
----这个authenicationProcessingFilter引用的有:
------authenticationManager(标号为11)
--------这个authenticationManager引用的有:
----------ldapAuthProvider(标号为16)
------------这个IdapAuthProvider引用的有:
--------------initialDirContextFactory(标号为14)
--------------userSearch(标号为15)
----------daoAuthenticationProvider(标号为12)
------------这个authenticationManager引用的有:
--------------userDetailsService(标号为13)
------ rememberMeServices(标号为10)
--securityContextHolderAwareRequestFilter, 上面标号的第5个Bean.
--rememberMeProcessingFilter,上面标号的第6个Bean.
----这个rememberMeProcessingFilter引用的有:
------authenticationManager(标号为11)
------ rememberMeServices(标号为10)
--anonymousProcessingFilter,上面标号的第7个Bean.
--exceptionTranslationFilter,上面标号的第8个Bean.
--filterInvocationInterceptor,上面标号的第9个Bean.
----这个filterInvocationInterceptor引用的有:
------authenticationManager(标号为11)
止此整个Bean树解析完毕,16个Bean中除了filterChainProxy自己外的15个里它引用了8个,另外的7个又都间接地引用,filterChainProxy是带头大哥无疑了!
这两个之间没什么必然的联系吧?ldap不熟悉,Acegi更是不熟悉.呵呵,这两个再搅和在一起就乱了.
ldap好像是与数据库连接相关的一个东东,那它与现在常见的数据库连接JDBC有什么区别?与JNDI呢?与这两个比又有什么优势?这个优势又怎么暗合了Acegi的需求?
对于Acegi只知道它是与Spring协作很好的一个Security框架,先不说Security别的方面,现在只看它如何管理登录这块,登录肯定是要访问数据库,那么在Acegi的配置文件中又是怎么来体现管理这个访问数据库的呢?
仔细研究项目中定义的applicationContext-acegi-secutiry.xml文件,这里面配置了如下的几个Bean:
1,filterChainProxy -->org.acegisecurity.util.FilterChainProxy
property: filterInvocationDefinitionSource,其值有:
CONVERT_URL_TOLOWERCASE_BEFORE_COMPARISON
PATTEN_TYPE_APCHE_ANT
/**=httpSessionContextIntegrationFilter, logoutFilter,authenicationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
?**
这么一长串是参数是干啥的,filterInvocationDefinitionSource是个什么类型?
看了一下它的源代码,其类型为:FilterInvocationDefinitionSource,那么这个类型怎么又会接收上面那么长的字符串?
再看FilterInvocationDefinitionSource的源代码,它是个接口,这下更惨了,FilterChainProxy初始化调用set时怎么又会初始化一个接口?内部匿名类?
先往下看.........
?
2,httpSessionContextIntegrationFilter -->org.acegisecurity.context.HttpSessionContextIntegrationFilter. 这个类没有属性可配.
3,logoutFilter -->org.acegisecurity.ui.logout.LogoutFilter
通过<constuctor-arg>配置了value="/index.htm".
又通过<constructor-arg>配置了 一个List其值为:
<ref bean = "remeberMeServices">?????????????????????????????????
和<bean class = "org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
4,authenicationProcessingFilter --> org.acegisecurity.ui.webapp.AuthenticationProcessingFilter
六个property:
authenticationManager ref authenticationManager ??????????????????????????
authenticationFailureUrl value="/jsp/accessDenied.jsp"
alwaysUseDefaultTargetUrl value = "true"
defaultTargetUrl value="/pages/content.html"/
filterProcessesUrl value="/jsp/j_acegi_security_check" ???????这个好像很关键的.
rememberMeServices ref="rememberMeServices" ???????????????????
5,securityContextHolderAwareRequestFilter --> org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter 没任何属性可配.
6,rememberMeProcessingFilter --> org.acegisecurity.ui.rememberme.RememberMeProcessingFilter
两个属性:
authenticationManager ref="authenticationManager" ???????????????????
rememberMeServices ref="rememberMeServices" ??????????????????
7,anonymousProcessingFilter --> org.acegisecurity.providers.anonymous.AnonymousProcessingFilter
两个属性:
key value="changeThis"
userAttribute value="anonymousUser,ROLE_ANONYMOUS"
8,exceptionTranslationFilter --> org.acegisecurity.ui.ExceptionTranslationFilter
两个属性:
<property name="authenticationEntryPoint">
<bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/jsp/login.jsp"/>
<property name="forceHttps" value="false"/>
</bean>
</property>
<property name="accessDeniedHandler">
<bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/jsp/accessDenied.jsp"/>
</bean>
</property>
9,filterInvocationInterceptor --> org.acegisecurity.intercept.web.FilterSecurityInterceptor
三个属性:
authenticationManager ref="authenticationManager" ???????????????????????
<property name="accessDecisionManager">
<bean class="org.acegisecurity.vote.AffirmativeBased">
<property name="allowIfAllAbstainDecisions" value="false"/>
<property name="decisionVoters">
<list>
<bean class="org.acegisecurity.vote.RoleVoter"/>
<bean class="org.acegisecurity.vote.AuthenticatedVoter"/>
</list>
</property>
</bean>
</property>
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/jsp/login.jsp=ROLE_ANONYMOUS
/jsp/**=ROLE_MPIXTOOLGROUP
</value>
</property>
10, rememberMeServices --> org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices
两个属性:
<property name="userDetailsService" ref="userDetailsService"/> ????????????
<property name="key" value="changeThis"/>
11, authenticationManager --> org.acegisecurity.providers.ProviderManager
一个属性:
<property name="providers"> ????????难道说这可就是登录信息的验证来源?providers嘛.
<list>
<!-- To Disable LDAP, comment out ldapAuthProvider reference below -->
<ref local="ldapAuthProvider"/>
<ref local="daoAuthenticationProvider"/>
<bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
<property name="key" value="changeThis"/>
</bean>
<bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
<property name="key" value="changeThis"/>
</bean>
</list>
</property>
12, daoAuthenticationProvider --> org.acegisecurity.providers.dao.DaoAuthenticationProvider
一个属性:
<property name="userDetailsService" ref="userDetailsService"/>
13, userDetailsService --> org.acegisecurity.userdetails.memory.InMemoryDaoImpl
一个属性:
<property name="userMap">
<value>
jklaassen=4moreyears,ROLE_ADMIN
test=test,ROLE_MPIXTOOLGROUP ?????????????这是静态的验证,没有去数据库里查用户和密码吗?
devteam=get2work,ROLE_MPIXTOOLGROUP
jgaerlan=1234,ROLE_MPIXTOOLGROUP
opts=opts,ROLE_OPERATIONS
</value>
</property>
注意下面有一段配置被注释掉了: ??????????????这个是要到数据库里查找吧?
<!--
<bean id="userDetailsService" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="usersByUsernameQuery">
<value>{call dbo.MLab_User_GetInfoByUserName(?)}</value>
</property>
<property name="authoritiesByUsernameQuery">
<value>{call dbo.MLab_UserRole_GetInfoByID(?)}</value>
</property>
</bean>
-->
14, initialDirContextFactory --> org.acegisecurity.ldap.DefaultInitialDirContextFactory
其配置如下:
<constructor-arg value="ldap://dc03:389/OU=Employees,OU=Pleasanton,dc=kittyhawk,dc=funmail,dc=com"/>
<property name="managerDn">
<value>cn=mpixtool,OU=Employees,OU=Pleasanton,dc=kittyhawk,dc=funmail,dc=com</value>
</property>
<property name="managerPassword">
<value>p@55w0rd</value> ??????????????????这个密码并没有用到呀,而是用test的
</property>
15, userSearch --> org.acegisecurity.ldap.search.FilterBasedLdapUserSearch ?????????这个来负责登录用户的验证?
<constructor-arg index="0">
<value></value>
</constructor-arg>
<constructor-arg index="1">
<value>sAMAccountName={0}</value>
</constructor-arg>
<constructor-arg index="2">
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="searchSubtree">
<value>true</value>
</property>
16, ldapAuthProvider --> org.acegisecurity.providers.ldap.LdapAuthenticationProvider
<constructor-arg>
<bean class="org.acegisecurity.providers.ldap.authenticator.BindAuthenticator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<property name="userSearch">
<ref local="userSearch"/>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator">
<constructor-arg>
<ref local="initialDirContextFactory"/>
</constructor-arg>
<constructor-arg>
<value></value>
</constructor-arg>
<property name="groupRoleAttribute">
<value>cn</value>
</property>
<property name="rolePrefix">
<value>ROLE_</value>
</property>
<property name="convertToUpperCase">
<value>true</value>
</property>
<property name="defaultRole">
<value>IS_AUTHENTICATED_FULLY</value>
</property>
</bean>
</constructor-arg>
一共配置了16个Bean,
filterChainProxy引用的Bean有:
--httpSessionContextIntegrationFilter,上面标号的第2个Bean.
--logoutFilter,上面标号的第3个Bean.
----这个logoutFilter引用的有:
------ rememberMeServices(标号为10)
--------这个rememberMeServices引用的有:
----------userDetailsService(标号为13)
--authenicationProcessingFilter, 上面标号的第4个Bean.
----这个authenicationProcessingFilter引用的有:
------authenticationManager(标号为11)
--------这个authenticationManager引用的有:
----------ldapAuthProvider(标号为16)
------------这个IdapAuthProvider引用的有:
--------------initialDirContextFactory(标号为14)
--------------userSearch(标号为15)
----------daoAuthenticationProvider(标号为12)
------------这个authenticationManager引用的有:
--------------userDetailsService(标号为13)
------ rememberMeServices(标号为10)
--securityContextHolderAwareRequestFilter, 上面标号的第5个Bean.
--rememberMeProcessingFilter,上面标号的第6个Bean.
----这个rememberMeProcessingFilter引用的有:
------authenticationManager(标号为11)
------ rememberMeServices(标号为10)
--anonymousProcessingFilter,上面标号的第7个Bean.
--exceptionTranslationFilter,上面标号的第8个Bean.
--filterInvocationInterceptor,上面标号的第9个Bean.
----这个filterInvocationInterceptor引用的有:
------authenticationManager(标号为11)
止此整个Bean树解析完毕,16个Bean中除了filterChainProxy自己外的15个里它引用了8个,另外的7个又都间接地引用,filterChainProxy是带头大哥无疑了!
- applicationContext-acegi-security.rar (2.4 KB)
- 描述: 被解剖的acegi配置文件.
- 下载次数: 60
评论
2 楼
SINCE1978
2009-05-31
"这么一长串是参数是干啥的,filterInvocationDefinitionSource是个什么类型?
看了一下它的源代码,其类型为:FilterInvocationDefinitionSource,那么这个类型怎么又会接收上面那么长的字符串?........."
FilterInvocationDefinitionSource(简称FIDS吧,acegi里到处是一长串的类名,连BenAlex自己都用简称:)是FilterChainProxy的属性,它的注入是依据的spring的属性编辑器,也就是同包下的:FilterInvocationDefinitionSourceEdit类来注入的。关于此点也并非spring发明,这是javaBeans规范:spring替我们做的应该是探测同一包下的某个class是否有classEditor存在,如果有,则spring自动向JDK的PropertyEditorManager注册这个PropertyEditor.以实现由此PropertyEditor来接收xml配置文本的属性然后解析处理为对应的属性类型实例并注入。
看了一下它的源代码,其类型为:FilterInvocationDefinitionSource,那么这个类型怎么又会接收上面那么长的字符串?........."
FilterInvocationDefinitionSource(简称FIDS吧,acegi里到处是一长串的类名,连BenAlex自己都用简称:)是FilterChainProxy的属性,它的注入是依据的spring的属性编辑器,也就是同包下的:FilterInvocationDefinitionSourceEdit类来注入的。关于此点也并非spring发明,这是javaBeans规范:spring替我们做的应该是探测同一包下的某个class是否有classEditor存在,如果有,则spring自动向JDK的PropertyEditorManager注册这个PropertyEditor.以实现由此PropertyEditor来接收xml配置文本的属性然后解析处理为对应的属性类型实例并注入。
1 楼
SSailYang
2008-03-24
ldap 是轻量级目录访问协议,是对目录服务器中各种操作的定义,和数据库没关系。推荐楼主先看看 IBM developerWorks 上的关于 Acegi 的文章。Spring in Action 也有关于 Acegi 的文章,但是相应的 Acegi 的版本比较老,但是基本的东西都没变。
发表评论
-
一个小菜鸟对企业应用分层的再认识(1).
2008-03-29 12:31 1870一个小菜鸟对企业应用分层的再认识(1).企业级应用的分层.&q ... -
用了Acegi后怎么从Login.jsp里传不过来parameter呢?
2008-03-24 09:23 1834作为实验,在login.jsp里加一条<input t ... -
Eclipse里配置Ant 组织的Project(3) -- E中配置Tomcat的JNDI
2008-03-23 21:26 3576Eclipse里配置Ant 组织的Project(3)接着Ec ... -
ldap与jndi有什么不同?
2008-03-23 13:25 2593ldap与jndi有什么不同?请问ldap与jndi有什么不同 ... -
JMS感触
2008-03-19 10:11 1785JMS感触:看一家公司的招聘上写着"熟悉JEE规范如 ...
相关推荐
多目标白鲸优化算法MOBWO:在多目标测试函数中的实证与应用分析,多目标白鲸优化算法MOBWO的实证研究:在九个测试函数中的表现与评估,多目标白鲸优化算法MOBWO 在9个多目标测试函数中测试 Matlab语言 程序已调试好,可直接运行,算法新颖 1将蛇优化算法的优良策略与多目标优化算法框架(网格法)结合形成多目标蛇优化算法(MOSO),为了验证所提的MOSO的有效性,将其在9个多目标测试函数 (ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、Kursawe、Poloni,Viennet2、Viennet3) 上实验,并采用IGD、GD、HV、SP四种评价指标进行评价,部分效果如图1所示,可完全满足您的需求~ 2源文件夹包含MOBWO所有代码(含9个多目标测试函数)以及原始白鲸优化算法文献 3代码适合新手小白学习,一键运行main文件即可轻松出图 4仅包含Matlab代码,后可保证原始程序运行~ ,多目标白鲸优化算法(MOBWO); 测试函数; Matlab语言; 程序调试; 算法新颖; 多目标蛇优化算法(MOSO); IGD、GD、HV、SP评价指标; 代码学习; 轻松出图。,基于
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:本文介绍了在中国石油勘探开发梦想云平台上定义REST API接口的基本规范,旨在提高接口质量,便于开发、测试和维护。主要内容包括REST API的基础概念,设计流程,URI、HTTP方法及响应状态码的运用,API文档的管理以及Swagger工具的应用,还详细阐述了API安全认证,特别是JWT的应用。通过这份文档能够帮助开发者理解和实施高质量的微服务架构。 适用人群:适用于参与或计划参与微服务项目的开发团队,尤其是那些致力于提升REST API接口质量和效率的专业技术人员。 使用场景及目标:文档的目标在于引导用户理解REST API接口设计的关键要素,如资源命名、方法选择等,并教会他们如何有效管理和保护这些API,确保其稳定性和安全性。通过实践本指南的原则,用户可以构建出更加健壮的分布式应用程序接口。 其他说明:此外,文中提供了大量关于API文档生成与维护的最佳做法,强调了文档更新须与代码同步,同时也探讨了API变更管理的有效方法。在安全方面,重点讲述了JWT的构成及其工作机制,展示了利用JWT实现高效认证的具体实例。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:该文档详细介绍了基于双向长短期记忆(BiLSTM)神经网络与Adaboost集成学习的时间序列预测模型及其应用。文中阐述了项目背景,指出了传统LSTM在复杂数据下存在的局限,提出了通过BiLSTM增强前后依赖关系,并结合Adaboost优化模型精度与泛化能力的方法。全文涵盖了从数据预处理、特征提取到建模、评估、以及GUI设计在内的全过程,并展示了该模型在金融预测、气象预报、能源管理和生产调度等多个领域的广泛应用潜力。文章还包括对代码片段的具体解析、模型部署的考量及未来发展的展望。 适合人群:拥有基本的机器学习与神经网络基础的研究人员和技术开发者,尤其是那些正在寻找时间序列数据分析解决方案的专业人士。 使用场景及目标:1. 多个领域如金融市场、气象预测等的时间序列数据处理任务中;2. 解决传统单一神经网络可能出现的过拟合并优化模型的鲁棒性和准确性。 其他说明:除了详细讲解如何使用Matlab实施完整的BiLSTM和Adaboost集成外,文中还特别注意到了模型调优的重要性——通过超参数搜索、早停策略和其他正则化技巧以预防过拟合情况的发生。此外,文档还讨论了有关实时数据处理、模型安全性和可移植性的要点。附带完整的Matlab代码实现了从环境准备直到预测结果可视化的每一个步骤,使读者可以很容易地复现和定制整个工作流程。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容概要:Go 1.24 版本引入了多项关键改进,其中包括:泛型类型别名,允许类型别名携带类型参数,简化代码实现;弱指针避免对象因包含在缓存中而无法被释放的问题;改进了终结器,提供了新的运行时函数 AddCleanup 以增强对象清理的灵活性和可靠性。另外,Go 1.24 改善了 map 的默认实现,显著提升了其运行时性能。与此同时,开源项目 miniblog 是一个功能全面、易于理解的 Go 实战项目。该项目采用了类似 Kubernetes 的三层架构设计,涵盖了许多 Go 项目开发的最佳实践和技术栈,不仅有助于开发者理解 Go 项目的核心理念和实施方法,还能提供一系列开发脚手架工具、配套课程和支持材料,以便更轻松地开展实际项目。 适合人群:1年以上 Go 开发经验的研发人员或正在寻找优秀 Go 项目充实自己简历的技术人员。 使用场景及目标:该总结的目标是帮助有一定 Go 基础的知识分子迅速了解新特性及其实用价值。miniblog 项目特别适用于希望加深对 Go 实践认识的学习者,尤其是那些想要通过参与实际编码练习和深入理解 Go 内部工作机制的人群。通过这两个方面的内容学习可以帮助使用者更好地理解 Go 新增特性的应用前景和发展方向,并能够在实践中灵活应用。 其他说明:本文档不仅涵盖了新特性的技术和理论要点,同时也展示了如何通过动手实践强化技能的具体例子。阅读本文不仅可以学到最新的 Go 编程技巧,还将了解到实际开发过程中面临的挑战及其解决方案。此外,还提供了一份详细的安装指导,以及一些常见的操作指南。对于新手而言,可以通过提供的完整配套资料逐步建立起个人的知识体系;而对于资深开发者,则可以在更高层次上审视自身项目的架构设计,进而推动技术创新和个人职业发展。
CoW项目是基于大模型的智能对话机器人,支持微信公众号、企业微信应用、飞书、钉钉接入,可选择GPT3.5/GPT4.0/Claude/Gemini/LinkAI/ChatGLM/KIMI/文心一言/讯飞星火/通义千问/LinkAI,能处理文本、语音和图片,通过插件访问操作系统和互联网等外部资源,支持基于自有知识库定制企业AI应用。 功能如下: 1、 多端部署: 有多种部署方式可选择且功能完备,目前已支持微信公众号、企业微信应用、飞书、钉钉等部署方式 2、 基础对话: 私聊及群聊的消息智能回复,支持多轮会话上下文记忆,支持 GPT-3.5, GPT-4o-mini, GPT-4o, GPT-4, Claude-3.5, Gemini, 文心一言, 讯飞星火, 通义千问,ChatGLM-4,Kimi(月之暗面), MiniMax, GiteeAI 3、 语音能力: 可识别语音消息,通过文字或语音回复,支持 azure, baidu, google, openai(whisper/tts) 等多种语音模型 4、 图像能力: 支持图片生等
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
基于LabVIEW的滚动轴承故障诊断系统:一种振动信号采集与故障诊断的实用设计与实践验证,基于LabVIEW的滚动轴承高效故障诊断系统设计与应用研究,基于LabVIEW的滚动轴承故障诊断系统. 实现对滚动轴承工作状态的监测,提出了一种基于 Lab VIEW 的滚动轴承故障诊断系统的设计方案,给出了滚动轴承振动信号的采集与故障诊断方法,在 Lab VIEW 的诊断平台下进行信号处理与分析,然后结合滚动轴承故障诊断理论与信号分析结果来对该轴承运行状态进行判断。 最后利用旋转机械振动及故障模拟试验平台对该系统进行验证,验证结果体现了该系统具有可行性和适用性。 ,LabVIEW; 滚动轴承故障诊断系统; 振动信号采集; 故障诊断方法; 信号处理与分析; 验证测试; 可行性; 适用性,基于LabVIEW的滚动轴承故障诊断系统设计与验证
Javascript语言视频教程,涵盖Javascript语言基础和高级教程,零基础入门。
python在链表的前面-开头插入一个节点
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
《基于改进动态窗口DWA模糊自适应调整权重的路径规划算法研究及其MATLAB实现》,《基于改进动态窗口DWA的模糊自适应权重调整路径规划算法及其MATLAB实现》,基于改进动态窗口 DWA 模糊自适应调整权重的路径基于改进动态窗口 DWA 模糊自适应调整权重的路径规划算法 MATLAB 源码+文档 《栅格地图可修改》 基本DWA算法能够有效地避免碰撞并尽可能接近目标点,但评价函数的权重因子需要根据实际情况进行调整。 为了提高DWA算法的性能,本文提出了一种改进DWA算法,通过模糊控制自适应调整评价因子权重,改进DWA算法的实现过程如下: 定义模糊评价函数。 模糊评价函数是一种能够处理不确定性和模糊性的评价函数。 它将输入值映射到模糊隶属度,根据规则计算输出值。 在改进DWA算法中,我们定义了一个三输入一输出的模糊评价函数,输入包括距离、航向和速度,输出为权重因子。 [1]实时调整权重因子。 在基本DWA算法中,权重因子需要根据实际情况进行调整,这需要人工干预。 在改进DWA算法中,我们通过模糊控制实现自适应调整,以提高算法的性能。 [2]评估路径。 通过路径的长度和避障情况等指标评估路
基于MATLAB平台PCA算法的人脸识别系统:程序调试成功,可替换数据获取高准确率识别结果,基于MATLAB平台PCA算法的人脸识别系统:程序调试与自我数据替换实现高精度识别结果,基于MATLAB平台PCA的人脸识别,程序已调通,可将自己的数据替进行识别。 得到识别准确率结果。 ,基于MATLAB平台PCA的人脸识别; 程序已调通; 数据替换; 识别准确率。,MATLAB平台PCA人脸识别程序:调通后实现高准确率识别
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作