07 、配置外部数据源和tomcat的安全验证机制 realm (1)【profile.xml】 <?xml version="1.0" encoding="UTF-8"?> <Context docBase="D:\atool\apache-tomcat-7.0.52\wtpwebapps\profile" path="/profile" reloadable="false" source="org.eclipse.jst.jee.server:profile"> <ResourceLink global="jdbc/mt" name="jdbc/mt" type="javax.sql.DataSource"/> <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@10.25.10.72:1521:mt" connectionName="rsms" connectionPassword="test1234" userTable="houjt_user" userNameCol="user_name" userCredCol="user_password" userRoleTable="houjt_user_in_roles" roleNameCol="role_id" /> </Context> 说明: docBase 项目的绝对路径,tomcat加载项目时使用。 path 项目的虚拟路径,一般是程序逻辑调用。 reloadable 当改变项目的配置文件时,禁止tomcat自动重新加载。 source 表示是曾经在eclipse的server配置tomcat,由eclipse生成的默认profile.xml,可以删除。 ResourceLink 项目引用的外部数据源 DataSource name 引用名jdbc/mt,可以理解成一个用于映射的id。 关联外部数据源和项目中指定的数据源。现在在tomcat里面配置外部数据源, 通过jdbc/mt 在context.xml文件中查找具体的数据连接串。 global 表示全局查找该引用名? tomcat的server.xml配置数据源,表示作用范围是全局,对所有应用有效。 如果是单个文件描述符如profile.xml,则只对当前项目有效。 (2)【context.xml】 <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/mt" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="4" maxWait="5000" username="rsms" password="test1234" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)( HOST=10.25.10.72)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=mt)))"/> </Context> (3)Realm 解释 <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" driverName="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@10.25.10.72:1521:mt" connectionName="rsms" connectionPassword="test1234" userTable="houjt_user" userNameCol="user_name" userCredCol="user_password" userRoleTable="houjt_user_in_roles" roleNameCol="role_id" /> a.指定了数据源信息 b.指定了用于验证登陆的2张表和字段信息。 userTable="houjt_user" 用户表:对应数据表 houjt_user userNameCol="user_id" 列名称:对应数据表 users的user_name列 userCredCol="user_password" 列名称:对应数据表 users的user_password列 userRoleTable="houjt_user_in_roles" 用户角色表:对应数据表 houjt_user_in_rolesroleNameCol="role_id" 列名称: 对应数据表 houjt_user_in_roles的role_id列 注意: 实际上tomcat是对houjt_user 和 houjt_user_in_roles 进行联表查询,所以两张表的关联字段必须是一样的,即用户表和用户角色表,通过user_id 关联。 (4)【web.xml】 <security-constraint> <web-resource-collection> <web-resource-name>profile page</web-resource-name> <url-pattern>*.shtml</url-pattern> </web-resource-collection> <auth-constraint> <role-name>R_PROFILE_MANAGER</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> 【login.jsp】 上面配置指定了用form提交。 $(function(){ $(window).resize(function() { center($('div.login')); }); center($('div.login')); $('#j_username').focus(); $('#btnLogin').click(function(){ var username = $.trim($('#j_username').val()).toUpperCase(); var password = $.trim($('#j_password').val()); if(username != '' && password != ''){ $('#j_username').val(username); $('#formMain').submit(); } }); }); <form method="post" onkeydown="checkKeyDown(event)" action="j_security_check" class="form-horizontal" id="formMain" style="padding:20px;background:#fff;width:300px;"> <p class="header"><%= request.getContextPath().replaceFirst("/", "").toUpperCase() %></p> <br /> <div> <label for="inputEmail"> 用户名 <!--[if lt IE 9]> <small style="color: gray;">(请输入UM账号或域账号)</small> <![endif]--> </label> <input type="text" style="width:285px" name="j_username" id="j_username" placeholder="请输入UM账号或域账号"> <label for="inputPassword"> 密码 <!--[if lt IE 9]> <small style="color: gray;">(请输入UM密码)</small> <![endif]--> </label> <input type="password" style="width:285px" name="j_password" id="j_password" placeholder="请输入UM密码或域密码"> </div> <div style="margin-top:5px;text-align:right"><input type="button" id="btnLogin" class="btn-success" value="登录"/></div> </form> j_username 、 j_password 、 j_security_check 该两个字段不可以改,是Realm中固定的字段,另外,form默认提交的url是j_security_check ======================== 一个简易form形如: <form name="loginForm" method="POST" action="j_security_check"> <table> <tr> <td><input type='text' name='j_username'></td> <td><input type='text' name='j_password'></td> </tr> <tr> <td><input type='submit' name='sub'></td> </tr> </table> </form> |
|