﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-初一七月-随笔分类-Web</title><link>http://www.blogjava.net/caojianhua/category/47782.html</link><description>你必须承认，我们生存的这个世界取决于自身的能力而非别人的保护(AW)</description><language>zh-cn</language><lastBuildDate>Tue, 29 Jan 2013 10:24:25 GMT</lastBuildDate><pubDate>Tue, 29 Jan 2013 10:24:25 GMT</pubDate><ttl>60</ttl><item><title>Redis并发问题</title><link>http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Mon, 28 Jan 2013 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/394847.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/394847.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/394847.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Redis 并发&nbsp;&nbsp;<a href='http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html'>阅读全文</a><img src ="http://www.blogjava.net/caojianhua/aggbug/394847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2013-01-28 19:23 <a href="http://www.blogjava.net/caojianhua/archive/2013/01/28/394847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn版本对比</title><link>http://www.blogjava.net/caojianhua/archive/2011/08/10/356271.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Wed, 10 Aug 2011 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2011/08/10/356271.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/356271.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2011/08/10/356271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/356271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/356271.html</trackback:ping><description><![CDATA[要对项目的两个版本进行比对，查看哪些文件发生了改变，可以使用svn的版本比对功能，具体如下：<br /><br /><span>1.TortoiseSVN-&gt;Repo-browser，找到需要比对的项目工程，这里假设要对项目的trunk与tag版本1.1进行比较，并将trunk作为基础版本<br /></span>2.右键trunk-&gt;Mark for comparison，然后找到1.1版本，右键-&gt;Show differences as unified diff，之后svn会弹出TortoiseUDiff窗口<br /><br />对比结果以文本形式显示，格式如下<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Index:&nbsp;com/service/SVNService.java<br />===================================================================<br />---&nbsp;com/service/SVNService.java&nbsp;&nbsp;&nbsp;&nbsp;(<img src="http://www.blogjava.net/Images/dot.gif" alt="" />/tag/1.1)&nbsp;&nbsp;&nbsp;&nbsp;(版本&nbsp;227144)<br />+++&nbsp;com/service/SVNService.java&nbsp;&nbsp;&nbsp;&nbsp;(<img src="http://www.blogjava.net/Images/dot.gif" alt="" />/trunk)&nbsp;&nbsp;&nbsp;&nbsp;(版本&nbsp;227097)<br />@@&nbsp;-20,7&nbsp;+20,8&nbsp;@@<br /><br />-if&nbsp;(!target.exists())&nbsp;return;<br />+if&nbsp;(target.exists())&nbsp;return;</span></div>通常情况下，第2-4行用黄背景显示，表示进行比较的两个版本，而以减号开头的行用红色背景，表示1.1版本有而trunk版本没有的内容，以加号开始的行用绿色背景显示，表示trunk有而1.1版本没有的内容，上面的结果显示，我们可能在tag版本里将判断条件从不存在返回改为了存在返回。<br /><br />另外以@@开头并结尾的行，表示下面的变动所在的位置<img src ="http://www.blogjava.net/caojianhua/aggbug/356271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2011-08-10 21:19 <a href="http://www.blogjava.net/caojianhua/archive/2011/08/10/356271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache 命令</title><link>http://www.blogjava.net/caojianhua/archive/2011/05/27/351202.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Fri, 27 May 2011 10:25:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2011/05/27/351202.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/351202.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2011/05/27/351202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/351202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/351202.html</trackback:ping><description><![CDATA[启动<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">apache/bin/apachectl&nbsp;start</span></div><br />停止<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">apache/bin/apachectl&nbsp;stop</span></div><br />重启<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">apache/bin/apachectl&nbsp;restart</span></div><br /><div>重启时不中断当前的连接</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">apache/bin/apachectl&nbsp;graceful</span></div><br /><div>如果apache安装成为linux的服务的话，可以用如下的命令<br /><br />启动<br /><div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">service&nbsp;httpd&nbsp;start</span></div><br />停止<br /><div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">service&nbsp;httpd&nbsp;stop</span></div><br />重启<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">service&nbsp;httpd&nbsp;restart</span></div></div><img src ="http://www.blogjava.net/caojianhua/aggbug/351202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2011-05-27 18:25 <a href="http://www.blogjava.net/caojianhua/archive/2011/05/27/351202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringMVC添加支持Http的delete、put请求</title><link>http://www.blogjava.net/caojianhua/archive/2011/05/18/350518.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Wed, 18 May 2011 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2011/05/18/350518.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/350518.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2011/05/18/350518.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/350518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/350518.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; 浏览器form表单只支持GET与POST请求，而DELETE、PUT等method并不支持，spring3.0添加了一个过滤器，可以将这些请求转换为标准的http方法，使得支持GET、POST、PUT与DELETE请求。<br /><br />&nbsp; &nbsp; 1.配置springmvc配置文件springmvc-servlet.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;浏览器不支持put,delete等method,由该filter将/xxx?_method=delete转换为标准的http&nbsp;delete方法&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">HiddenHttpMethodFilter</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.springframework.web.filter.HiddenHttpMethodFilter</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">HiddenHttpMethodFilter</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">springmvc</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;</span></div><br />&nbsp; &nbsp; 其中springmvc是DispatcherServlet的名称<br /><br />&nbsp; &nbsp; 2.在对应的Controller中，添加对应的请求注解<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;进入新增&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/new</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;显示&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;编辑&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}/edit</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;保存新增&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />@RequestMapping(method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">RequestMethod.POST)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;保存更新&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">RequestMethod.PUT)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;删除&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />@RequestMapping(value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">RequestMethod.DELETE)&nbsp;&nbsp;<br /><br /></span><span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;批量删除&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; ">&nbsp;&nbsp;<br />@RequestMapping(method</span><span style="color: #000000; ">=</span><span style="color: #000000; ">RequestMethod.DELETE)</span></div><br />&nbsp; &nbsp; 进入新增页面时没有用add而是用new，是因为某些浏览器会将add当做广告拦截掉。<br /><br />&nbsp; &nbsp; 3.页面请求<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form:form&nbsp;</span><span style="color: #FF0000; ">action</span><span style="color: #0000FF; ">="/xxx/xxx"</span><span style="color: #FF0000; ">&nbsp;method</span><span style="color: #0000ff; ">="put"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">form:form</span><span style="color: #0000FF; ">&gt;</span></div><br />&nbsp; &nbsp; 生成的页面代码会添加一个hidden的_method=put,并于web.xml中的HiddenHttpMethodFilter配合使用，在服务端将post请求改为put请求<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="userInfo"</span><span style="color: #FF0000; ">&nbsp;action</span><span style="color: #0000FF; ">="/xxx/xxx"</span><span style="color: #FF0000; ">&nbsp;method</span><span style="color: #0000FF; ">="post"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="hidden"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="_method"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="put"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp;</span></div><br />&nbsp; &nbsp; 另外也可以用ajax发送delete、put请求<img src ="http://www.blogjava.net/caojianhua/aggbug/350518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2011-05-18 18:31 <a href="http://www.blogjava.net/caojianhua/archive/2011/05/18/350518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP添加Basic认证</title><link>http://www.blogjava.net/caojianhua/archive/2011/02/23/345016.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Wed, 23 Feb 2011 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2011/02/23/345016.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/345016.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2011/02/23/345016.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/345016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/345016.html</trackback:ping><description><![CDATA[一个web站点，总会有一些资源需要保护，比如图片文件、某些页面等，使用basic认证简单方便，易于配置，且完全独立于开发。basic认证既可以在web容器上，也可以放到前端服务器上。<br />
<br />
<strong>resin配置<br />
</strong><br />
basic的resin配置需要在web项目的描述文件web.xml中，通过添加如下内容，可以对指定路径的资源进行保护，所有对指定资源的访问，都需要输入配置的用户名与密码，验证通过后才可以正常访问。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">authenticator&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="com.caucho.server.security.XmlAuthenticator"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">init</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">user</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">user:pass:admin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">user</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">password-digest</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">none</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">password-digest</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">init</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">authenticator</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">login-config&nbsp;</span><span style="color: #ff0000;">auth-method</span><span style="color: #0000ff;">="basic"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">security-constraint&nbsp;</span><span style="color: #ff0000;">url-pattern</span><span style="color: #0000ff;">="/admin/**"</span><span style="color: #ff0000;">&nbsp;role-name</span><span style="color: #0000ff;">="admin"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span></div>
<br />
上面的配置代表当用户访问以yourapp/admin/开头的所有资源时，都需要通过basic认证（如果之前还没有通过的话），用户名是user，密码是pass。有时候需要保护的资源不止一项，那么可以用如下的方法配置。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">authenticator&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="com.caucho.server.security.XmlAuthenticator"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">init</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">user</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">user:pass:admin</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">user</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">password-digest</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">none</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">password-digest</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">init</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">authenticator</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">login-config&nbsp;</span><span style="color: #ff0000;">auth-method</span><span style="color: #0000ff;">="basic"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">security-constraint</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">web-resource-collection</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">web-resource-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Protected&nbsp;Context</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">web-resource-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/admin/**</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/manage/**</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">url-pattern</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">web-resource-collection</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">auth-constraint&nbsp;</span><span style="color: #ff0000;">role-name</span><span style="color: #0000ff;">='admin'&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">security-constraint</span><span style="color: #0000ff;">&gt;</span></div>
<br />
此时所有以yourapp/admin/或者yourapp/manage/开头的资源都需要经过basic认证。<br />
<br />
<strong>nginx配置</strong><br />
<br />
虽然resin的配置也可以达到效果，但是毕竟是配置到了工程文件中，以后定期更换用户名与密码，都得更新项目描述符；而且有个更要命的问题，如果一个resin上有多个项目的话，一次更新就需要修改所有相关项目的web.xml文件，太麻烦了。在nginx上也可以配置basic认证，而且更简单。<br />
<br />
nginx的http
basic认证密码是用crypt(3)加密的，可以试用apache的htpasswd生成密码文件。首先进入apache的安装目录，进入apache/bin/目录下，可以看到htpasswd，输入如下命令生成密码文件。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">htpasswd&nbsp;-c&nbsp;-d&nbsp;pass_file&nbsp;user_name</span></div>
<br />
<br />
其中-c表示生成文件，-d表示是以crypt加密，pass_file是密码文件名，user_name表示basic认证的用户名，回车后会提示输入密码，然后再次输入确认，生成密码文件完成。<br />
<br />
然后就是配置nginx，nginx的认证需要配置到location下，如下所示。<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">location&nbsp;~&nbsp;/admin/manage&nbsp;{<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;auth_basic&nbsp;&nbsp;"Auth";<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;auth_basic_user_file&nbsp; pass_file;<br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" />}</span></div>
<br />
其中Auth可以随意设置，它只不过是当需要认证时弹出窗口的服务显示名称而已，pass_file就是我们之前生成的密码文件，这里要注意nginx 0.6.7开始，auth_basic_user_file的相对目录是nginx_home/conf，以前版本的相对目录是nginx_home，现在只要访问包含/admin/manage路径的资源都会弹出认证框，而且对于一个nginx代理了n个web服务的情况，需要更换用户名与密码时，只需要将密码文件替换一次即可，比第一种方式方便可靠了很多。<br />
<br />
<img src ="http://www.blogjava.net/caojianhua/aggbug/345016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2011-02-23 22:41 <a href="http://www.blogjava.net/caojianhua/archive/2011/02/23/345016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个别图片IE中无法显示问题</title><link>http://www.blogjava.net/caojianhua/archive/2011/02/16/344473.html</link><dc:creator>初一七月</dc:creator><author>初一七月</author><pubDate>Wed, 16 Feb 2011 12:40:00 GMT</pubDate><guid>http://www.blogjava.net/caojianhua/archive/2011/02/16/344473.html</guid><wfw:comment>http://www.blogjava.net/caojianhua/comments/344473.html</wfw:comment><comments>http://www.blogjava.net/caojianhua/archive/2011/02/16/344473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caojianhua/comments/commentRss/344473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caojianhua/services/trackbacks/344473.html</trackback:ping><description><![CDATA[今天有人保障，某些图片在IE下无法打开，但是其他浏览器均没有问题。以前还真没遇到过这类问题，从上至下查看了一遍，能排除的因素基本都排除了，还是不知道为什么不能显示，真是奇怪了。最后注意到无法显示的图片大小跟其他的不一样，至少是其他图片的两倍大小，从服务器把图片下载下来，没有什么问题，都能打开，但是在IE下图片属性里显示不可用。用xp自带的画图工具打开图片重新保存了下，大小立刻变到了不到30k，传到服务器上，可以正常访问了，但是图片的某些图层丢失了，询问了下，原来这张图片是用PS处理完后保存的，看来就是这张图片本身的问题了。<br />
<br />
上网google了下，得知PS保存时可能会将色彩设为CMYK模式，CMYK一般在排版时使用的比较多，而这种模式的jpg图片在IE中是不能显示的，需要改为RGB模式的，也就是红绿蓝三原色模式的，怪不得用画图工具重新保存后就可以看到了。<br />
<br />
查看一张图片的色彩模式，可以用PS打开图片，图片上部的标题行里就会有显示，这个在保存图片时可以设置，具体在图像-&gt;模式里，在这里可以查看、修改图片的色彩模式。
<img src ="http://www.blogjava.net/caojianhua/aggbug/344473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caojianhua/" target="_blank">初一七月</a> 2011-02-16 20:40 <a href="http://www.blogjava.net/caojianhua/archive/2011/02/16/344473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>