登录失败页面 
                
                
                
 
                  清单4-2  登录失败页面源代码(error.jsp)
                1.      
                  <%@ page language="java" contentType="text/html;charset=gb2312" 
                  %>
                  2.      
                <html> 
                3.      <head>
                4.      <title>登录失败</title> 
                5.      </head>
                6.      <body bgcolor=#ffffff> 
                7.      <table width="400" 
                  border="0" align="center" cellpadding="0"
                8.          cellspacing="0"> 
                9.          <tr>
                10.        <td> 
                11.              
                  <table width="100%" border=0 cellpadding="0" 
                  cellspacing="0">
                12.     <tr 
                bgcolor="#FFFFFF"> 
                13.                     
                    <td height="25" colspan="2" 
                  align="center" bgcolor="#FFFFFF" 
                  class="title1"> </td>
                14.              
                  </tr> 
                15.                     
                  <tr bgcolor="#FFFFFF">
                16.                             
                <td height="25" colspan="2" align="center" 
                bgcolor="#D0D9FD"
                class="blank"><h2 class="STYLE1">登录失败</h2></td> 
                17.                     
                  </tr>
                18.                     
                <tr bgcolor="#FFFFFF"> 
                19.                             
                  <td height="10" colspan="2" bgcolor="#F
                0F3FF" class="blank"></td> 
                20.                     
                  </tr>
                21.                     
                <tr bgcolor="#FFFFFF"> 
                22.                             
                  <td height="10" colspan="2" bgcolor="#F0F3FF" class="blank">
                  您的用户名或者密码错误,请按此<a href="login.jsp" class="blank">
                  <span class="STYLE3">重新登录</span></a></td> 
                
                23.                     
                  </tr> 
                24.                     
                  <tr bgcolor="#FFFFFF"> 
                25.                             
                  <td height="10" colspan="2" bgcolor="#F0F3FF" class="blank"></td> 
                
                26.                     
                  </tr> 
                27.              
                  </table> 
                28.        </td> 
                
                29.      </tr> 
                30.  </table> 
                31.  </body> 
                32.  </html>
                 要使用V-Security安全框架保护您的Web资源,需要完成以下步骤: 
                
                1、  
                  修改web.xml配置文件,详细内容参见清单(4-3) 
                
                  a)      
                  创建名为SecurityFilter的Filter
                  SecurityFilter的处理类是org.vivianj.web.security.SecurityFilter,默认设置为对所有 Web资源有效,SecurityFilter可以接受三个参数,分别是form-login-page、form-error-page、 form-login-ok-page,他们分别对应的是登录页面的路径、登录失败页面的路径和登录成功页面 的路径,您可以根据自己的实际情况进行修改。
                   b)    
                  新建一个Session Listener
                  V-Security安全框架中用户登录信息保存在Session中,因此需要一个Session Listenser处 理用户非正常退出后留下的Session信息。Session Listener的处理类是org.vivianj.web.security.listener.SecuritySessionListener。 
                  c)     
                  新建名为VivianjSecurity的Servlet     
                  
                  V-Security中默认安全提供者(Security Provider)的登录接口就是这个Servlet,它的处理
                  类是org.vivianj.web.security.SecurityServlet。   
                清单 4-3  WEB-INF/web.xml 
                1.      <?xml 
                  version="1.0" encoding="GBK"?>   
                2.      <!DOCTYPE 
                  web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application
                  2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> 
                3.        
                  
                4.      <web-app>
                 5.        <display-name>security</display-name>
                 6.        <description></description> 
                  
                7.        <filter> 
                  
                8.          <filter-name>SecurityFilter</filter-name> 
                  
                9.          <display-name>SecurityFilter</display-name> 
                  
                10.      <description></description> 
                  
                11.      <filter-class>org.vivianj.web.security.SecurityFilter</filter-class> 
                  
                12.      <init-param> 
                  
                13.        <param-name>form-login-ok-page</param-name> 
                  
                14.        <param-value>ok.jsp</param-value> 
                  
                15.      </init-param> 
                  
                16.      <init-param> 
                  
                17.        <param-name>form-error-page</param-name> 
                  
                18.        <param-value>error.jsp</param-value> 
                  
                19.      </init-param> 
                  
                20.      <init-param> 
                  
                21.        <param-name>form-login-page</param-name> 
                  
                22.        <param-value>login.jsp</param-value> 
                  
                23.      </init-param> 
                  
                24.    </filter> 
                  
                25.    <filter-mapping> 
                  
                26.      <filter-name>SecurityFilter</filter-name> 
                  
                27.      <url-pattern>/*</url-pattern> 
                  
                28.    </filter-mapping> 
                  
                29.    
                30.    <listener> 
                  
                31.      <listener-class>org.vivianj.web.security.listener.SecuritySessionListener
                  </listener-class> 
                32.    </listener> 
                  
                33.    
                34.    <servlet> 
                  
                35.      <servlet-name>action</servlet-name> 
                  
                36.      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
                 37.      <init-param> 
                  
                38.        <param-name>debug</param-name> 
                  
                39.        <param-value>2</param-value> 
                  
                40.      </init-param> 
                  
                41.      <init-param> 
                  
                42.        <param-name>config</param-name> 
                  
                43.        <param-value>/WEB-INF/struts-config.xml</param-value> 
                  
                44.      </init-param> 
                  
                45.      <init-param> 
                  
                46.        <param-name>detail</param-name> 
                  
                47.        <param-value>2</param-value> 
                  
                48.      </init-param> 
                  
                49.      <load-on-startup>2</load-on-startup> 
                  
                50.    </servlet> 
                  
                51.    <servlet> 
                  
                52.      <servlet-name>DisplaySource</servlet-name> 
                  
                53.      <display-name>DisplaySource</display-name> 
                  
                54.      <description>display 
                  source of sample jsp pages</description> 
                55.      <servlet-class>org.displaytag.sample.DisplaySourceServlet</servlet-class> 
                  
                56.    </servlet> 
                  
                57.    <servlet> 
                  
                58.      <servlet-name>VivianjSecurity</servlet-name> 
                  
                59.      <display-name>VivianjSecurity</display-name> 
                  
                60.      <description></description> 
                  
                61.      <servlet-class>org.vivianj.web.security.SecurityServlet</servlet-class> 
                  
                62.    </servlet> 
                  
                63.    <servlet-mapping> 
                  
                64.      <servlet-name>VivianjSecurity</servlet-name> 
                  
                65.      <url-pattern>/security</url-pattern> 
                  
                66.    </servlet-mapping> 
                  
                67.    <servlet-mapping> 
                  
                68.      <servlet-name>DisplaySource</servlet-name> 
                  
                69.      <url-pattern>*.source</url-pattern> 
                  
                70.    </servlet-mapping> 
                  
                71.    <servlet-mapping> 
                  
                72.      <servlet-name>action</servlet-name> 
                  
                73.      <url-pattern>*.do</url-pattern> 
                  
                74.    </servlet-mapping> 
                  
                75.    <welcome-file-list> 
                  
                76.      <welcome-file>login.jsp</welcome-file> 
                  
                77.      <welcome-file>index.html</welcome-file> 
                  
                78.      <welcome-file>upload.jsp</welcome-file> 
                  
                79.    </welcome-file-list> 
                  
                80.    <taglib> 
                  
                81.      <taglib-uri>/tags/struts-bean</taglib-uri> 
                  
                82.      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> 
                  
                83.    </taglib> 
                  
                84.    <taglib> 
                  
                85.      <taglib-uri>/tags/struts-logic</taglib-uri> 
                  
                86.      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> 
                  
                87.    </taglib> 
                  
                88.    <taglib> 
                  
                89.      <taglib-uri>/tags/struts-html</taglib-uri> 
                  
                90.      <taglib-location>/WEB-INF/struts-html.tld</taglib-location> 
                  
                91.    </taglib> 
                  
                92.    <taglib> 
                  
                93.      <taglib-uri>/tags/struts-tiles</taglib-uri> 
                  
                94.      <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location> 
                  
                95.    </taglib> 
                  
                96.    <taglib> 
                  
                97.      <taglib-uri>http://displaytag.sourceforge.net/</taglib-uri> 
                  
                98.      <taglib-location>/WEB-INF/displaytag-11.tld</taglib-location> 
                  
                99.    </taglib> 
                  100.   <taglib> 
                101.     <taglib-uri>/tags/struts-nested</taglib-uri> 
                  
                102.     <taglib-location>/WEB-INF/struts-nested.tld</taglib-location> 
                  
                103.   </taglib> 
                104. </web-app>   
                2、  
                  增加安全约束声明    
                  
                   修改WEB-INF/classes/config/security-resources.xml。 
                   a)       为需要保护的资源增加新的security-constraint元素        
                    保护的URL可以是HTML、JSP、Servlet或者其他可访问的Web资源。清单4-4中要保护的URL是 /undersecurity/declarative/b.jsp。 
                   b)       为被保护的资源加入角色        
                   security-constraint元素中可以加入roles元素声明访问被保护资源所必需具备的角色,角 色可以使用role元素增加多个。比如清单4-4中被保护的资源可以被角色为”roleA”和”roleB” 的用户同时访问   
                   
                清单4-4 WEB-INF/classes/config/security-resources.xml  
                 1.      <?xml 
                  version="1.0" encoding="GBK"?> 
                2.        
                  
                3.      <security-constraints> 
                  
                4.        <security-constraint 
                  name="adminSecurity"> 
                5.          <web-resource> 
                  
                6.            <url-pattern>/undersecurity/declarative/b.jsp</url-pattern> 
                  7.          </web-resource> 
                  
                8.          <roles> 
                  
                9.          
                       <role name="roleA" 
                  /> 
                10.           <role 
                  name="roleB" /> 
                11.      </roles> 
                  
                12.    </security-constraint> 
                  
                13.  </security-constraints> 
                  
                  
                3、编写欢迎页面(ok.jsp)    
                  下面是一个欢迎页面(ok.jsp)的示例界面。 
                图4-3 欢迎页面(ok.jsp)
                 
                
                
   
                 
                清单4-5 ok.jsp 
                  1.       
                <%@ page language="java" contentType="text/html;charset=gb2312" 
                %> 
                2.       <%@ page import="org.vivianj.web.security.util.PageSecurity" 
                  %>
                3.       <html> 
                4.       <head>
                5.       <title登录成功</title>
                6.       <style type="text/css"> 
                
                7.       td {
                8.      font-size: 14px; 
                9.       }
                10.    .title1 { 
                11.    font-size: 14px;
                12.    color: #00000;
                13.    } 
                14.    -->
                15.    </style>
                16.    <link href="css/screen.css" 
                rel="stylesheet" type="text/css"> 
                17.    <style type="text/css">
                18.    <!-- 
                19.    .STYLE3 {color: #FF0000}
                20.    --> 
                21.    </style>
                22.    </head>
                 23.    <body bgcolor=#ffffff> 
                  24.    <table width="600" border="0" 
                  align="center" cellpadding="0" 
                25.    cellspacing="0" 
                  class="page">  
                 
                26.    <tr>
                27.   <td> 
                28.    <table width="100%" border=0 
                  cellpadding="0" cellspacing="0">
                29.    <bgcolor="#FFFFFF"> 
                30.    <td height="25" colspan="4" 
                  class="title1" align="center"> </td>
                31.     </tr>
                32.   <tr bgcolor="#FFFFFF"> 
                33.     <td height="25" colspan="4" 
                  align="center" bgcolor="#D0D9FD" class="title1">
                  <h2>欢迎您选择V-Securt开源框架!</h2></td>
                34.   </tr> 
                35.                          
                
                 36.<tr bgcolor="#FFFFFF"> 
                  
                37.<td height="10" colspan="3" 
                  bgcolor="#E2E8FE" align="center"恭喜 <span 
                  
                  class="STYLE3"><%= PageSecurity.getUserPrincipal(request) 
                  %></span> 登录成功! 
                38. <td> 
                
                39.  <td align="right" colspan="1" 
                  bgcolor="#E2E8FE"><span class="STYLE3"><a 
                  
                  href="<%=request.getContextPath()%>/console/loginOutView.do?userName=
                  <%=PageSecurity.getUserPrincipal(request)%>"安全退出</a></span></td>
                40. </tr> 
                41.                          
                
                42.  <tr bgcolor="#FFFFFF"> 
                43.  <td height="1" bgcolor="#0099FF" 
                  colspan="4"></td>
                44. </tr> 
                45. <tr bgcolor="#FFFFFF">
                46.                
                <td width="19%" height="10" align="center" 
                class="indexleftjsp">管  理</td> 
                47.       <td width="25%" 
                  align="center"><a href="#">个 人信 
                  息</a></td>
                48.       <td width="28%" 
                  height="10" align="center"><a href="#"内 
                  容 发 布</a></td> 
                49.          <td 
                  width="28%" height="20" align="center"><a 
                  href="console/main.jsp" 
                  class="STYLE3"安 全 管 理</a></td>
                50.         </tr> 
                
                51.        <tr align="center" 
                  bgcolor="#FFFFFF">
                52.    <td height="1" colspan="4" 
                bgcolor="#0099FF"></td> 
                53.     </tr>
                54.    <tr bgcolor="#FFFFFF"> 
                55.     <td height="20" align="center" 
                  class="indexleftjsp"服  务</td>
                56.              
                    <td align="center"><a href="#"同 
                  学 搜 索</a></td>
                57.                  
                    <td height="10" align="center"><a 
                  href="#">免 费 邮 箱</a></td> 
                58.              <td 
                  height="10" align="center"><a href="#"长 
                  沙 社 区</a></td>
                59.           
                    </tr> 
                60.      <tr bgcolor="#FFFFFF">
                61.  <td height="1" bgcolor="#0099FF" 
                colspan="4"></td> 
                62.            </tr>
                63.            
                  <tr bgcolor="#FFFFFF">
                64.     <td height="20" 
                align="center" class="indexleftjsp">安全示例</td> 
                65.    <td align="center"><a 
                  href="undersecurity/declarative/b.jsp">声明式安全</a></td>
                 66.                    
                    <td height="10" align="center"><a 
                  href="undersecurity/programmatic/c.jsp">
                 编程式安全</a></td> 
                67.               <td 
                  height="10" align="center"><a href="undersecurity/join/c.jsp"混合式安全</a></td>
                68.           
                    </tr> 
                69.       <tr bgcolor="#FFFFFF">
                70.           
                  <td height="1" bgcolor="#0099FF" 
                colspan="4"></td> 
                71.  </tr>
                72.   </table> 
                73.</td>
                74.   </tr> 
                75.    </table>
                76.    </body> 
                77.    </html>
                  
                 
                4、编写被保护的资源(b.jsp)    
                  
                  下面是一个被保护的资源(b.jsp)。
                图4-4显示了被保护的资源对应的界面
                清单4-6 b.jsp中是被保护资源对应的源代码。 
                  图4-4 被保护的资源
                 
   
                清单4-6 undersecurity/declarative/b.jsp 
                  
                1.     <%@ page 
                  language="java" contentType="text/html;charset=gb2312" 
                  %>
                2.     <%@ 
                  page import="org.vivianj.web.security.util.PageSecurity" 
                  %> 
                3.         
                  <html> 
                4.         
                  <head> 
                5.         
                  <title>V-Security页面级安全示例页</title>
                6.         
                <style type="text/css"> 
                7.         td {font-size: 
                  14px;
                8.
                9.         }
                10.     .title1 {
                11.            
                  font-size: 14px;
                12.            
                  color: #00000;
                13.     }
                14.     -->
                15.     </style>
                16.     <link href="css/screen.css" 
                  rel="stylesheet" type="text/css">
                17.     <style type="text/css">
                18.     <!--
                19.     .STYLE3 {color: #FF0000}
                20.     -->
                21.     </style>
                22.     </head>
                23.            
                  <body>
                24.      
                25.     <table width="400" 
                  border="0" align="center" cellpadding="5" 
                  cellspacing="0">
                26.       <tr>
                27.         <td 
                  align="center" bgcolor="#D0D9FD" valign="middle"><h2>V-Security页面级安全示例页</h2></td>
                28.       </tr>
                29.       <tr>
                30.         <td 
                  bgcolor="#E2E8FE">
                31.         <br> 
                32.          本示例页基于页面级安全保护,只有角色为"roleA"或者"roleB"的用户才有权访问.
                33.            
                  <br>
                34.     <br>当前登录用户 <font color="red"><%= 
                  PageSecurity.getUserPrincipal(request) %><br> </font></td>
                35.       </tr>
                36.     </table>
                37.      
                38.            
                  </body>
                39.     </html>
                 5、完成角色影射   
                  
                   请参考1管理安全提供者(Security 
                  Provider)中的说明完成角色影射工作。   
                  完成上述步骤后,将V-Security项目发布到服务器上,然后启动服务器,访问/undersecurity/declarative/b.jsp页面,
                  我们将看到登录页面(因为该资源被保护),输入正确的用户名和密码后登录,再次访问/undersecurity/declarative/b.jsp,
                  我们将能够看到b.jsp中的界面。