<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_登山耐危路，踏雪耐危桥</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/24677/rss</id><updated>2012-01-30T08:14:53Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24677/rss"/><entry><id>http://www.cnblogs.com/lodestar/archive/2012/01/30/2332117.html</id><title type="text">错误数据导致java.lang.IllegalArgumentException:Unsupported configuration attributes</title><summary type="text">Unsupported configuration attributes错误</summary><published>2012-01-30T08:15:00Z</published><updated>2012-01-30T08:15:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2012/01/30/2332117.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2012/01/30/2332117.html"/><content type="html">&lt;p&gt;系统启动一直报：Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Unsupported configuration attributes: [test]，分析代码也没有问题啊，最后发现是单元测试的时候将角色名称test插入数据库的角色表，导致系统启动时报错。&lt;br /&gt;如果系统中使用安全框架acegi，默认角色以role_开头，否则会报此类错误，当然，角色前缀可在配置文件中修改。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lodestar/aggbug/2332117.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2012/01/30/2332117.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2011/12/31/2308829.html</id><title type="text">使用ACEGI搭建权限系统：第三部分</title><summary type="text">ACEGI结合CAS实现单点登录</summary><published>2011-12-31T07:45:00Z</published><updated>2011-12-31T07:45:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308829.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308829.html"/><content type="html">&lt;p&gt;三使用CAS实现单点登录&lt;br /&gt;1.CAS SEVER3环境搭建&lt;br /&gt;&amp;nbsp;拷贝cas服务器到tomcat的部署目录下，可直接使用。&lt;br /&gt;&amp;nbsp;CAS默认的认证规则是用户名=密码即可登录，使用dbms认证需加入cas-server-support-jdbc.jar,ojdbc14&lt;br /&gt;&amp;nbsp;同时修改deployerConfigContext.xml中的authenticationHandlers配置：&lt;br /&gt;&amp;nbsp;&amp;lt;bean &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="dataSource" ref="dataSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="sql" value="select password from t_admin_user where login_name=?" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="passwordEncoder" ref="MD5PasswordEncoder"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="dataSource" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="driverClassName"&amp;gt;&amp;lt;value&amp;gt;com.mysql.jdbc.Driver&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="url"&amp;gt;&amp;lt;value&amp;gt;jdbc:mysql:///wsriademo&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="username"&amp;gt;&amp;lt;value&amp;gt;root&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="password"&amp;gt;&amp;lt;value&amp;gt;root&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;lt;bean id="MD5PasswordEncoder" &amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;constructor-arg index="0"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;MD5&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;修改登录页面：&lt;br /&gt;&amp;nbsp;修改cas\WEB-INF\view\casLoginView.jsp页面，修改为我们想要的登录页面&lt;/p&gt;&#xD;
&lt;p&gt;2.配置证书，实现ssl登录环境&lt;br /&gt;&amp;nbsp;web服务器需要实现SSL，资源请求通过web server上的cas client使用proxyValidate和cas之间完成认证，这些都是需要配置x.509证书&lt;br /&gt;//创建根证书，并采用自签名签署它&lt;br /&gt;//创建私钥&lt;br /&gt;openssl genrsa -out d:/apps/root/root-key.pem 1024&lt;br /&gt;//创建证书请求&lt;br /&gt;openssl req -new -out d:/apps/root/root-req.csr -key d:/apps/root/root-key.pem&lt;br /&gt;//自签署根证书&lt;br /&gt;openssl x509 -req -in d:/apps/root/root-req.csr -out d:/apps/root/root-cert.pem -signkey d:/apps/root/root-key.pem -days 3650&lt;br /&gt;//将根证书导出成浏览器支持的.p12（PKCS12）格式&lt;br /&gt;openssl pkcs12 -export -clcerts -in d:/apps/root/root-cert.pem -inkey d:/apps/root/root-key.pem -out d:/apps/root/root.p12&lt;br /&gt;//打印证书&lt;br /&gt;keytool -printcert -file d:/apps/root/root-cert.pem&lt;/p&gt;&#xD;
&lt;p&gt;//创建服务器证书，并采用根证书签署它&lt;/p&gt;&#xD;
&lt;p&gt;//创建私钥&lt;br /&gt;openssl genrsa -out d:/apps/server/server-key.pem 1024&lt;br /&gt;//创建证书请求&lt;br /&gt;openssl req -new -out d:/apps/server/server-req.csr -key d:/apps/server/server-key.pem&lt;br /&gt;//签署服务器证书&lt;br /&gt;openssl x509 -req -in d:/apps/server/server-req.csr -out d:/apps/server/server-cert.pem -signkey d:/apps/server/server-key.pem -CA d:/apps/root/root-cert.pem -CAkey d:/apps/root/root-key.pem -CAcreateserial -days 3650&lt;br /&gt;//将客户证书导出成浏览器支持的.p12（PKCS12）格式&lt;br /&gt;openssl pkcs12 -export -clcerts -in d:/apps/server/server-cert.pem -inkey d:/apps/server/server-key.pem -out d:/apps/server/server.p12&lt;br /&gt;//打印证书&lt;br /&gt;keytool -printcert -file d:/apps/server/server-cert.pem&lt;/p&gt;&#xD;
&lt;p&gt;//创建客户证书，并采用根证书签署它&lt;/p&gt;&#xD;
&lt;p&gt;//创建私钥&lt;br /&gt;openssl genrsa -out d:/apps/client/client-key.pem 1024&lt;br /&gt;//创建证书请求&lt;br /&gt;openssl req -new -out d:/apps/client/client-req.csr -key d:/apps/client/client-key.pem&lt;br /&gt;//签署客户证书&lt;br /&gt;openssl x509 -req -in d:/apps/client/client-req.csr -out d:/apps/client/client-cert.pem -signkey d:/apps/client/client-key.pem -CA d:/apps/root/root-cert.pem -CAkey d:/apps/root/root-key.pem -CAcreateserial -days 3650&lt;br /&gt;//将客户证书导出成浏览器支持的.p12（PKCS12）格式&lt;br /&gt;openssl pkcs12 -export -clcerts -in d:/apps/client/client-cert.pem -inkey d:/apps/client/client-key.pem -out d:/apps/client/client.p12&lt;/p&gt;&#xD;
&lt;p&gt;//打印证书&lt;br /&gt;keytool -printcert -file d:/apps/client/client-cert.pem&lt;/p&gt;&#xD;
&lt;p&gt;....................................&lt;/p&gt;&#xD;
&lt;p&gt;//根据根证书生成相应的jks文件&lt;br /&gt;keytool -import -v -trustcacerts -storepass password -alias root -file d:/apps/root/root-cert.pem -keystore d:/apps/root/root.jks&lt;/p&gt;&#xD;
&lt;p&gt;把root.jks,root.p12,server.p12导入到tomcat的conf目录中&lt;br /&gt;配置tomcat ssl，修改conf/server.xml,tomcat6中多了SSLEnabled="true"&lt;br /&gt;&amp;lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxHttpHeaderSize="8192" scheme="https" secure="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enableLookups="false" disableUploadTimeout="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; acceptCount="100" sslProtocol="TLS" clientAuth="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystoreFile="D:/apache-tomcat-6.0.29/conf/server.p12"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keystoreType="PKCS12" keystorePass="password"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; truststoreFile="D:/apache-tomcat-6.0.29/conf/root.jks"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; truststoreType="JKS" truststorePass="password" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;IE中导入root.p12和client.p12，root.p12导入到受信任的根证书颁发机构&lt;/p&gt;&#xD;
&lt;p&gt;修改JDK,使JDK可以找到证书&lt;br /&gt;设置tomcat启动参数&lt;br /&gt;-Djavax.net.ssl.trustStore=D:/apache-tomcat-6.0.29/conf/root.jks -Djavax.net.ssl.trustStorePassword=password&lt;br /&gt;方法2:&lt;br /&gt;keytool -import -v -trustcacerts -storepass changeit -alias root -file d:/apps/root/root-cert.pem -keystore cacerts&lt;br /&gt;keytool -v -list -alias root -keystore cacerts&lt;br /&gt;方法3：&lt;br /&gt;&amp;lt;property name="ticketValidator"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 导入认证证书，也可使用jdk工具导入 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="trustStore" value="C:/Tomcat 5.5/conf/root.jks" /&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;3.使用acegi集成CAS&lt;br /&gt;&amp;nbsp;这个看上面的xml就可以了。里面有解释&lt;br /&gt;&amp;nbsp;casAuthenticationProvider&lt;br /&gt;&amp;nbsp;&amp;nbsp;CasProxyTicketValidator,casValidatecasValidate,trustStore,serviceProperties,proxyCallbackUrl(代理时用)和表单认证有不同&lt;br /&gt;&amp;nbsp;注意&lt;br /&gt;&amp;nbsp;serviceProperties中service属性(CAS server登陆完毕后由CAS server重定向回来的页面)，多系统的环境要写好回调地址&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;4.单点退出的处理&lt;br /&gt;配置logoutFilter，退出后调用&lt;a href="https://localhost:8443/cas/logout"&gt;https://localhost:8443/cas/logout&lt;/a&gt;接口，注销服务器端ST&lt;br /&gt;&amp;lt;bean id="logoutFilter" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 注销后导向的页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;constructor-arg value="&lt;a href="https://localhost:8443/cas/logout"&gt;https://localhost:8443/cas/logout&lt;/a&gt;" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;constructor-arg&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean  /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 注销的url --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterProcessesUrl" value="/j_logout.do" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;界面中紧接刷新就可以讲浏览器中PT也清除了&lt;br /&gt;&amp;nbsp;function logout(){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;parent.window.location.reload(true);&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/lodestar/aggbug/2308829.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308829.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2011/12/31/2308609.html</id><title type="text">acegi安全框架使用：第二部分</title><summary type="text">介绍dbms实现鉴权，包括资源过滤和方法过滤，业务系统设计</summary><published>2011-12-31T04:16:00Z</published><updated>2011-12-31T04:16:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308609.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308609.html"/><content type="html">&lt;p&gt;二、dbms实现鉴权&lt;br /&gt;1.dbms鉴权，修改FilterSecurityInterceptor中的objectDefinitionSource属性，注入rdbmsFilterInvocationDefinitionSource,可加入Ehcahe提高性能&lt;br /&gt;&amp;lt;!-- 权限过滤,基于URL的过滤器,使用RDBMS和Ehcache实现 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="securityInterceptor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 修改默认值，防止没有授权的角色导致的错误 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="validateConfigAttributes" value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="accessDecisionManager" ref="accessDecisionManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="objectDefinitionSource" ref="rdbmsFilterInvocationDefinitionSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="rdbmsFilterInvocationDefinitionSource" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="dataSource" ref="dataSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="webresdbCache" ref="webresCacheBackend" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="webresCacheBackend" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheManager" ref="cacheManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheName"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;webresdbCache&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;RdbmsFilterInvocationDefinitionSource是objectDefinitionSource的dbms实现，这个要自己实现&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;2.aop实现方法过滤&lt;br /&gt;&amp;nbsp;如果不想对action，url等资源过滤，也可对调用方法过滤，实现特定角色只能实现特定方法。在applicationContext.xml中配置,注意这里是用BeanNameAutoProxyCreator实现aop的.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;bean id="serviceSecurityInterceptor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="validateConfigAttributes" value="true" /&amp;gt; &amp;lt;property&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="authenticationManager" ref="authenticationManager" /&amp;gt; &amp;lt;property&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="accessDecisionManager" ref="accessDecisionManager" /&amp;gt; &amp;lt;property&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="objectDefinitionSource"&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;com.role.action.RoleAction.operateRole=ROLE_ADMIN &amp;lt;/value&amp;gt; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="serviceSecurityInterceptor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="validateConfigAttributes" value="true" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="accessDecisionManager" ref="accessDecisionManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="objectDefinitionSource" ref="rdbmsMethodDefinitionSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="rdbmsMethodDefinitionSource" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="dataSource" ref="dataSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="webresdbCache" ref="webresCacheBackend" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="webresCacheBackend" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheManager" ref="cacheManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheName"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;webresdbCache&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="autoProxyCreator"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="interceptorNames"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;serviceSecurityInterceptor&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="beanNames"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;*Action&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.表结构设置&lt;br /&gt;&amp;nbsp;按照常规的权限模型设计：用户表、角色表、用户角色关系表、角色功能关系表；系统表、模块表、菜单表、按钮表、按钮资源表(在一个操作做个url的情况使用)&lt;br /&gt;&amp;nbsp;权限这块的表结构所有的系统都查不多，这里只是在功能表里面多加上了url字段。对外显示为特定角色有执行某模块、某菜单、界面中的某个按钮的权限，对内则是某个角色和action的映射关系供acegi鉴权使用&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/角色授权.JPG" width="447" height="305" /&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/lodestar/aggbug/2308609.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2011/12/31/2308609.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2011/12/27/2303798.html</id><title type="text">使用ACEGI实现权限控制，第一部分</title><summary type="text">使用ACEGI实现权限控制，第一部分：环境搭建</summary><published>2011-12-27T09:20:00Z</published><updated>2011-12-27T09:20:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2011/12/27/2303798.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2011/12/27/2303798.html"/><content type="html">&lt;p&gt;环境：&lt;br /&gt;&amp;nbsp;struts2，acegi1.0.6，spring2.5.1,cas3&lt;/p&gt;&#xD;
&lt;p&gt;一、综述：环境搭建&lt;br /&gt;1.spring和acegi版本&lt;br /&gt;spring2.5.6和acegi1.0.6兼容性问题&lt;br /&gt;会报&lt;br /&gt;java.lang.NoClassDefFoundError: org/springframework/web/bind/RequestUtils&lt;br /&gt;不过据说装合适的spring-webmvc这个jar也可以解决问题，没有测试&lt;/p&gt;&#xD;
&lt;p&gt;1.搭建acegi环境&lt;br /&gt;web.xml配置，使用acegi的过滤器&lt;br /&gt;配置web.xml&lt;br /&gt;&amp;lt;context-param&amp;gt;中包含新配置文件&lt;br /&gt;&amp;lt;!-- Acegi过滤器 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;filter-name&amp;gt;acegiFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;filter-class&amp;gt;org.acegisecurity.util.FilterToBeanProxy&amp;lt;/filter-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-name&amp;gt;targetClass&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param-value&amp;gt;org.acegisecurity.util.FilterChainProxy&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/filter&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- Acegi过滤器URL映射 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;filter-name&amp;gt;acegiFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/filter-mapping&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;过滤器要放在struts前面，否则会报错。因为有些操作要acegi中的springmvc处理&lt;br /&gt;javax.servlet.ServletException: Filter execution threw an exception&lt;br /&gt;&amp;nbsp;org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)&lt;br /&gt;java.lang.NoClassDefFoundError: org/springframework/web/bind/RequestUtils&lt;br /&gt;&amp;nbsp;&lt;br /&gt;配置acegi配置文件，配置认证管理器、投票管理器、过滤器链、配置acegi的log4j日志&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns="&lt;a href="http://www.springframework.org/schema/beans"&gt;http://www.springframework.org/schema/beans&lt;/a&gt;"&lt;br /&gt;&amp;nbsp;xmlns:xsi="&lt;a href="http://www.w3.org/2001/XMLSchema-instance"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;"&lt;br /&gt;&amp;nbsp;xsi:schemaLocation="&lt;a href="http://www.springframework.org/schema/beans"&gt;http://www.springframework.org/schema/beans&lt;/a&gt; &lt;a href="http://www.springframework.org/schema/beans/spring-beans.xsd"&gt;http://www.springframework.org/schema/beans/spring-beans.xsd&lt;/a&gt;"&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--&lt;br /&gt;&amp;nbsp;&amp;nbsp;========================================================================&lt;br /&gt;&amp;nbsp;&amp;nbsp;认证管理器&lt;br /&gt;&amp;nbsp;&amp;nbsp;=========================================================================&lt;br /&gt;&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="authenticationManager" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="providers"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="daoAuthenticationProvider" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="rememberMeAuthenticationProvider" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="daoAuthenticationProvider"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="userDetailsService" ref="userDetailsService" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="userCache" ref="userCache" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;lt;!-- 基于DAO验证的Ehcache实现 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="userCache"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cache" ref="userCacheBackend" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="userCacheBackend" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheManager" ref="cacheManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="cacheName"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;userCache&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="cacheManager"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="rememberMeAuthenticationProvider"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="key" value="remember_Me" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 使用数据库DAO查找用户和角色 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="userDetailsService" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="dataSource" ref="dataSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="usersByUsernameQuery"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;![CDATA[SELECT u.staffname USERNAME,u.staffpwd PASSWORD,u.STATUS enabled FROM sw_staff u where u.STATUS = 1 AND u.staffname = ?]]&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authoritiesByUsernameQuery"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;![CDATA[SELECT t1.staffid USERNAME,t3.roledec authority FROM sw_staff t1, SW_UserPower t2,sw_Roles t3 WHERE t1.staffid= t2.staffid and t2.roleid= t3.roleid and t1.staffname = ?]]&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--&lt;br /&gt;&amp;nbsp;&amp;nbsp;========================================================================&lt;br /&gt;&amp;nbsp;&amp;nbsp;决策管理器&lt;br /&gt;&amp;nbsp;&amp;nbsp;=========================================================================&lt;br /&gt;&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;!-- 至少有一个投票者容许，就可以访问资源 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="accessDecisionManager" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="decisionVoters"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean  /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 所有投票者弃权，不容许访问 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="allowIfAllAbstainDecisions" value="false" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!--&lt;br /&gt;&amp;nbsp;&amp;nbsp;========================================================================&lt;br /&gt;&amp;nbsp;&amp;nbsp;过滤器链&lt;br /&gt;&amp;nbsp;&amp;nbsp;=========================================================================&lt;br /&gt;&amp;nbsp;--&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="filterChainProxy" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterInvocationDefinitionSource"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PATTERN_TYPE_APACHE_ANT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,rememberMeFilter,exceptionFilter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 从Session中获得用户信息并放入SecurityContextHolder --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="httpSessionContextIntegrationFilter"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 用户注销 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="logoutFilter" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 注销后默认的跳转页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;constructor-arg value="/helloWorld.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;constructor-arg&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ref bean="rememberMeServices" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean  /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/constructor-arg&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterProcessesUrl" value="/j_logout.do" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 表单方式验证用户身份 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="authenticationProcessingFilter"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 登录失败的页面,包含出错信息的登录页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationFailureUrl" value="/login.jsp?login_error=Login%20failed." /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 登录后的跳转页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="defaultTargetUrl" value="/helloWorld.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 用户登录的URL --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterProcessesUrl" value="/j_acegi_security_check" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="rememberMeServices" ref="rememberMeServices" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="casProcessingFilter" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 登录后的跳转页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="defaultTargetUrl" value="/helloWorld.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterProcessesUrl" value="/j_acegi_cas_security_check" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 认证失败后的跳转页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationFailureUrl" value="/login.jsp?login_error=Login%20failed." /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="rememberMeServices" ref="rememberMeServices"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 记住用户登录信息 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;!--&amp;lt;bean id="rememberMeFilter"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="rememberMeServices" ref="rememberMeServices" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;--&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;!-- 处理登录异常或权限异常的Filter --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="exceptionFilter" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 出现AuthenticationException时的登录入口,无认证异常 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;表单登录时用 &amp;lt;property name="authenticationEntryPoint"&amp;gt; &amp;lt;bean&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;将用户导向登录页面 &amp;lt;property name="loginFormUrl" value="/login.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;是否强制使用https &amp;lt;property name="forceHttps" value="false" /&amp;gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!--CAS认证登录时用--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationEntryPoint"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="loginUrl"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value="&lt;a href="https://localhost:8443/cas-server-webapp-3.1.1/login"&gt;https://localhost:8443/cas-server-webapp-3.1.1/login&lt;/a&gt;" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="serviceProperties" ref="serviceProperties" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 出现AccessDeniedException时的Handler，无权限异常--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="accessDeniedHandler"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;bean &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="errorPage" value="/accessDenied.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="serviceProperties" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- CAS登录后的重定向页面--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="service" value="&lt;a href="http://localhost:8080/test"&gt;http://localhost:8080/test&lt;/a&gt;" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="sendRenew" value="false" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="securityInterceptor"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="accessDecisionManager" ref="accessDecisionManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="objectDefinitionSource"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PATTERN_TYPE_APACHE_ANT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/index.jsp=ROLE_LOGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*action=ROLE_LOGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;说明：&lt;br /&gt;1、过滤器链：filterChainProxy，有顺序要求&lt;br /&gt;/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,rememberMeFilter,exceptionFilter,securityInterceptor&lt;/p&gt;&#xD;
&lt;p&gt;2、rememberMe配置要点&lt;br /&gt;rememberMeServices使用TokenBasedRememberMeServices，token64编码后放入cookie&lt;br /&gt;logoutFilter使用rememberMeServices，离开后保存cookie&lt;/p&gt;&#xD;
&lt;p&gt;rememberMeFilter配置authenticationManager和rememberMeServices&lt;br /&gt;rememberMeServices的parameter和html表单的Remember Me字段的name一致&lt;br /&gt;rememberMeServices的key和authenticationManager中的rememberMeAuthenticationProvider的key要一致&lt;/p&gt;&#xD;
&lt;p&gt;3、使用DaoAuthenticationProvide实现基于数据库的用户认证授权，userDetailsService中可以用注入sql使用数据库实现，文件方式保存用户基本没啥用&lt;br /&gt;&amp;nbsp;修改usersByUsernameQuery和authoritiesByUsernameQuery注入sql&lt;br /&gt;&amp;nbsp;使用Ehache提高性能&lt;/p&gt;&#xD;
&lt;p&gt;4、配置日志&lt;br /&gt;&amp;nbsp;&amp;lt;!-- 监听认证授权事件，输出日志 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="authenticationLoggerListener"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.event.authentication.LoggerListener" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;bean id="authorizationLoggerListener"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.event.authorization.LoggerListener" /&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;对应的，如果是log4j.xml&lt;br /&gt;log4j.xml&lt;br /&gt;&amp;lt;logger name="log4j.logger.org.acegisecurity" additivity="true"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;level value="DEBUG" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;appender-ref ref="LOG.DEBUG" /&amp;gt;&lt;br /&gt;&amp;lt;/logger&amp;gt;&lt;br /&gt;如果是log4j.properties&lt;br /&gt;log4j.properties&lt;br /&gt;&amp;nbsp;log4j.logger.org.acegisecurity=DEBUG&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;5.表单认证&lt;br /&gt;&amp;lt;bean id="authenticationProcessingFilter"&lt;br /&gt;&amp;nbsp;&amp;nbsp;class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationManager" ref="authenticationManager" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 登录失败的页面,包含出错信息的登录页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="authenticationFailureUrl" value="/login.jsp?login_error=Login%20failed." /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 登录后的跳转页面 --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="defaultTargetUrl" value="/helloWorld.jsp" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;!-- 用户登录的URL --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="filterProcessesUrl" value="/j_login.do" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;property name="rememberMeServices" ref="rememberMeServices" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;表单中的username和password的name这里为j_username和j_password，acegi的springmvc实现中用&lt;br /&gt;&amp;nbsp;filterProcessesUrl默认是j_acegi_security_check，可以修改，需要登录页面同步&lt;/p&gt;&#xD;
&lt;p&gt;6.用户注销&lt;br /&gt;&amp;nbsp;logoutFilter中filterProcessesUrl默认是j_acegi_logout，只要将退出页面中url设置为j_acegi_logout就可以触发&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;7.授权&lt;br /&gt;accessDecisionManager:事前评估。使用投票表决器。RoleVoter是基于角色的投票表决器。&lt;br /&gt;这里securityInterceptor使用文件配置，也可以修改为数据库方式实现&lt;/p&gt;&#xD;
&lt;p&gt;8.使用aop对方法授权&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第二部分：介绍dbms实现鉴权，包括资源过滤和方法过滤，表结构模型&lt;/p&gt;&#xD;
&lt;p&gt;第三部门：和CAS集成，包括CAS环境搭建，acegi集成CAS&lt;/p&gt; &lt;img src="http://www.cnblogs.com/lodestar/aggbug/2303798.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2011/12/27/2303798.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2011/11/29/2267655.html</id><title type="text">ajax实现用户名存在校验</title><summary type="text">javascript和jquery实现ajax验证</summary><published>2011-11-29T07:03:00Z</published><updated>2011-11-29T07:03:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2011/11/29/2267655.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2011/11/29/2267655.html"/><content type="html">&lt;p&gt;ajax方式实现：用户名在数据库中的存在校验，网上非常多了&lt;br /&gt;1、可以用javaScript调用action&lt;br /&gt;if(window.ActiveXObject)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpd = new ActiveXObject("Microsoft.XMLHTTP");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else if(window.XMLHttpRequest)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlHttpd = new XMLHttpRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;uri = encodeURI(uri + "?" + key:value);&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;xmlHttpd.open("post",uri,false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;xmlHttpd.onreadystatechange = function()&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(xmlHttpd.readyState==4){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(xmlHttpd.status==200){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//ajax调用成功后的操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var rt = xmlHttpd.responseText.replace(/\s/ig,'');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;***********&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;xmlHttpd.send(null);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;注意事项：&lt;br /&gt;1、后台如果是strtus2的话，key要在action中注入，或者采用标准写法：实体类.属性。struts2会使用拦截器构造实体类，并注入action&lt;br /&gt;2、如果action的编码是utf-8,页面编码是gbk，那么参数在action中是乱码，需进行编码转换&lt;br /&gt;3、返回参数也是一样，如果页面和action的编码不一致的话，response要设置编码setCharacterEncoding("GBK")，否则回传中文会出现乱码&lt;/p&gt;&#xD;
&lt;p&gt;2.jquery实现&lt;br /&gt;$(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;$("#rolename").bind("blur", function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;var rolename=$.trim($("#rolename").val());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (rolename.length &amp;gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.get("validateRole.action",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;$("#newrole").serialize(), //序列化表单数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;callback,"html");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;&amp;nbsp;//接收服务器返回的数值，将服务器返回的数据动态的显示在页面上&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function callback(data){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; var rt = data.replace(/\s/ig,'');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; if (rt == 2){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;$("#showResult").html("角色名已存在");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;$("#rolename").focus();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; } else if (rt == 3){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;$("#showResult").html("角色验证失败请联系管理员");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; } else if (rt == 1){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;$("#showResult").text("*格式:ROLE_");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;jquery的serialize会自动构造key:value参数，注意事项同js实现&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;2.服务器端使用HttpServletResponse.getWriter获得PrintWriter对象，回写返回信息&lt;br /&gt;&amp;nbsp;也可以使用dwr调用，将整个action状态作为josn返回&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lodestar/aggbug/2267655.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2011/11/29/2267655.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2011/01/13/1934487.html</id><title type="text">分支在版本树中的应用(使用subversion)</title><summary type="text">分支在配置管理中的使用(工具subversion)</summary><published>2011-01-13T05:42:00Z</published><updated>2011-01-13T05:42:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2011/01/13/1934487.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2011/01/13/1934487.html"/><content type="html">&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;场景&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;项目已上线，需不断维护。要求加入全市统一的功能，并马上上线，功能已经开发并测试，目前正在修改一些小的&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;bug&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;。但是新需求在不断引入：修改周期长，由于新需求还未完全实现并测试，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;bug&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;修正后无法马上发布新版本。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;产品化的软件，可能会有多版本存在，其中部分代码需要不断同步。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;这两种应用场景，都可以考虑建立分支版本，使用版本控制工具的自动合并功能，更好的实现配置管理。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;基本概念&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;REVISION &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;修订版本号&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;HEAD &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;版本库中的最新版本&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;下面三个是本地路径：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BASE &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;如果发生本地修改，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BASE&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;版本就是本地未修改版本&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COMMITEED &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;在&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;BASE&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;之前最后修改的版本&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;PREV &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;最后修改版本之前的版本，技术上也叫&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;COMMITEED-1&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;拷贝&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;-&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;修改&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;-&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;合并方案&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;版本库和修订号&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;全局修订号，一个修订号对应一个版本树，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;commit&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;之后产生全局修订号，本地工作拷贝为混合版本，&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;update&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;之后是本地工作拷贝为最新的全局修订号。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Commit&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;之后进入混合修订版本。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Pull push&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;分离原则&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/版本变化.JPG" width="393" height="282" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:formulas&gt;&lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 1 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum 0 0 @1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @2 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @3 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @0 0 1"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @6 1 2"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelWidth"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @8 21600 0"&gt;&lt;/v:f&gt;&lt;v:f eqn="prod @7 21600 pixelHeight"&gt;&lt;/v:f&gt;&lt;v:f eqn="sum @10 21600 0"&gt;&lt;/v:f&gt;&lt;/v:formulas&gt;&lt;v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"&gt;&lt;/v:path&gt;&lt;o:lock aspectratio="t" v:ext="edit"&gt;&lt;/o:lock&gt;&lt;/v:shapetype&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;常规工作方式：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;svn import &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;导入项目到&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;svn&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;库&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;svn checkout &lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;得到工作拷贝&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;建立分支&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 21pt; margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;使用&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;svn copy&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;命令或工具创建&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/创建.JPG" width="640" height="400" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;建立分支后的版本变化&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/版本树.jpg" width="396" height="170" /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;h2 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Cambria; mso-hansi-font-family: Cambria"&gt;分支合并&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;注意：每次合并，提交都建立日志。选择好合并到哪个工作拷贝&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; color: red; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;/span&gt;&lt;span style="color: red" lang="EN-US"&gt;&lt;o:p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/合并.JPG" width="513" height="439" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h3 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;font size="5"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;h3 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;font size="5"&gt;主干合并到分支&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;范围合并或者版本树合并&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;最后一个&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;方法&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;1:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/主干到分支.JPG" width="640" height="437" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;指定主干版本的版本范围，此范围内被合并到分支&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;方法&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;两个不同版本树合并&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/版本树合并.JPG" width="508" height="433" /&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;选择分支指定版本号&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;最后一次同步版本&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;)&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;到最新的主干版本直接版本，此版本范围内的版本被同步&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;解决冲突：使用版本库版本或者使用本地版本，或者编辑修改&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/冲突解决1.JPG" width="484" height="272" /&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/冲突解决2.JPG" width="510" height="440" /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;h3 style="margin: 13pt 0cm"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;font size="5"&gt;分支合并到主干&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span lang="EN-US"&gt;&lt;font face="Calibri"&gt;Reintegrate brache&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;或者不同版本树合并&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt" &gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lodestar/2011/分支合并到主干.JPG" width="504" height="441" /&gt;&lt;/span&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/lodestar/aggbug/1934487.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2011/01/13/1934487.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2010/12/31/1923156.html</id><title type="text">3年后，又回到了.net阵营</title><summary type="text">就算是今年的年终终结吧。　　08年去了java项目组，不知道为什么，虽然在javaeye注册了ID，但是始终提不起写博客的欲望，没有写什么东西。这3年的时间，接触了java的常用的开发框架，技术关心比较少了。主要精力放在业务知识学习，领域分析上了。项目管理上也投入一些心思，人员的工作安排，客户沟通等等，也有小小收获。觉得没有什么提高。　　以后要注意时间投资的有效性，对开发方面的技能要迅速扫过，掌握，不能花太多时间，否则效率太低。还有时间投资的比率要控制，有技术延续性的技能加强时间投资，向分析、设计；项目管理；oracle这些技术就比java、net更有积累意义。总之，新年了，用新面貌开始新生活</summary><published>2010-12-31T07:20:00Z</published><updated>2010-12-31T07:20:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2010/12/31/1923156.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2010/12/31/1923156.html"/><content type="html">&lt;p&gt;就算是今年的年终终结吧。&lt;/p&gt;&#xD;
&lt;p&gt;08年去了java项目组，不知道为什么，虽然在javaeye注册了ID，但是始终提不起写博客的欲望，没有写什么东西。这3年的时间，接触了java的常用的开发框架，技术关心比较少了。主要精力放在业务知识学习，领域分析上了。项目管理上也投入一些心思，人员的工作安排，客户沟通等等，也有小小收获。觉得没有什么提高。&lt;br /&gt;&amp;nbsp;　　以后要注意时间投资的有效性，对开发方面的技能要迅速扫过，掌握，不能花太多时间，否则效率太低。还有时间投资的比率要控制，有技术延续性的技能加强时间投资，向分析、设计；项目管理；oracle这些技术就比java、net更有积累意义。&lt;br /&gt;&amp;nbsp;总之，新年了，用新面貌开始新生活。认真、努力的工作。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lodestar/aggbug/1923156.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lodestar/archive/2010/12/31/1923156.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2009/08/18/1549132.html</id><title type="text">oracle相关分布式数据解决方案</title><summary type="text">可能在云计算、SOA架构下这种方案会逐渐消亡，但是目前还是比较实用的,本文简单介绍了常用的数据同步方案，由于正在使用高级复制的解决方案，所以重点说了oracle的高级复制</summary><published>2009-08-18T09:07:00Z</published><updated>2009-08-18T09:07:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2009/08/18/1549132.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2009/08/18/1549132.html"/></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2008/10/08/1306157.html</id><title type="text">移动中间件和wap网关的比较</title><summary type="text">wap网关和各厂商移动中间件的介绍与比较，和自己对wap开发方面选型的心得</summary><published>2008-10-08T03:03:00Z</published><updated>2008-10-08T03:03:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2008/10/08/1306157.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2008/10/08/1306157.html"/></entry><entry><id>http://www.cnblogs.com/lodestar/archive/2008/05/08/1188655.html</id><title type="text">wf框架编程(设计器部分)</title><summary type="text">wf工作流设计器的实现思路，相关类结构</summary><published>2008-05-08T08:56:00Z</published><updated>2008-05-08T08:56:00Z</updated><author><name>lodestar</name><uri>http://www.cnblogs.com/lodestar/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lodestar/archive/2008/05/08/1188655.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lodestar/archive/2008/05/08/1188655.html"/></entry></feed>
