分享

【140441-02】day5:profile-tomcat-realm

 GreatStep 2014-04-01
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_roles

roleNameCol="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>




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多