`
wibiline
  • 浏览: 117283 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Tomcat <Realm>配置

阅读更多

JDBCRealm 概述

JDBCRealm是tomcat 6 对Realm接口的实现,它通过JDBC驱动程序访问关系数据库。它的遍历配置可以适应于您已有的表和列名,只要您的数据库接口符合下列规范:

1. 必须有一张用户表,包含Realm可以识别的所有合法用户名称的行。 

用户表必须包含至少两列:

  当用户登录时,Tomcat可以识别用户名。

  当用户登录时,Tomcat可以识别用户密码。

2. 必须有一张用户角色表,包含关联特殊用户的每种合法角色的行。用户有0个,1个或多个角色都是允许的。

用户角色表必须包含至少两列: 

   Tomcat可以识别的用户名(和用户表中的相应值一致)。

   用户关联的合法角色名。

 

快速入门需要以下步骤设置Tomcat使用JDBCRealm:

1. 创建以上描述中必须的表和列。

2. 配置使用Tomcat的用户名和密码,至少需要有只读权限(Tomcat不会修改表中数据)。

3. 拷贝JDBC驱动程序到$CATALINA_HOME/lib目录。(注意:单纯的放在项目的lib下是不可以的,要放到tomcat的lib目录下)

4. 在您的$CATALINA_HOME/conf/server.xml文件中设置元素,或者通过jndi方式加载项目,则可以在 $CATALINA_HOME/conf/localhost 下增加 项目.xml,此文件里设置元素

5. Realm元素属性要配置JDBCRealm,以下是这个实现支持的参数:

className Realm实现的java全名。在这里必须“org.apache.catalina.realm.JDBCRealm”;

connectionName 建立JDBC连接的用户名;

connectionPassword 建立JDBC连接的密码;

connectionURL 建立JDBC连接的URL;

digest 使用非明文方式保存用户密码的摘要算法。只能输入java.security.MessageDigest支持的算法名称。如果不指定,密码以明文方式保存;

driverName 使用的JDBC驱动程序全名。详细信息请查看您使用的JDBC驱动程序;

roleNameCol 用户角色表中的角色名,包含赋予用户的角色;

userCredCol 用户表中列名,包含用户的密码(可以是明文也可以是密文);

userNameCol 用户和用户角色表中的列表,包含了用户名;

userRoleTable 用户角色表。表中必须有userNameCol和roleNameCol中指定的列;

userTable 用户表。表中必须有userNameCol列;

 

例子:

 

Tomcat6.0+ XXX系统

1. 数据库准备

数据库里建立2张表或者2个视图也可以。(以下以视图为例)

用户表:

create or replace view users as

    select col1  username, col2  password  from table1

 

用户角色表:

create or replace view roles as
   select col1  username, col3   role   from  table1

 

2.tomcat采用jndi的方式加载系统,所以在conf\Catalina\localhost下增加一个xml文件,文件内容如下:

 

<Context path="XXX" reloadable="true" docBase="****">
<Realm className="org.apache.catalina.realm.JDBCRealm" 
debug="99" driverName="oracle.jdbc.driver.OracleDriver" 
connectionURL="jdbc:oracle:thin:@ip:port:sid"
connectionName="test" connectionPassword="test"
userTable="users" userNameCol="username" userCredCol="password"
userRoleTable="roles" roleNameCol="role" />
<Resource ....略.../>
</Context>

xml解析:

userTable="users"     用户表:对应数据视图 users

userNameCol="username"   列名称:对应数据库视图 users的username列

userCredCol="password"    列名称:对应数据库视图 users的password列


userRoleTable="roles"   用户角色表:对应数据库视图 roles

roleNameCol="role"       列名称:      对应数据库视图 roles的role列

 

3. XXX项目的web.xml文件配置

 

 <security-constraint>
  <display-name>admin</display-name>
  <web-resource-collection>
   <web-resource-name>Secure</web-resource-name>
   <url-pattern>*.do</url-pattern>     <!--制定应该保护的URL-->
   <http-method>GET</http-method>
   <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>                 <!--允许以下角色访问受保护的URL-->
   <description>constraints</description>   
   <role-name>DataManage</role-name>    <!--角色名称-->
  </auth-constraint>
  <user-data-constraint>
   <transport-guarantee>NONE</transport-guarantee>  <!--将对所用的通讯协议不加限制-->
  </user-data-constraint>
 </security-constraint>
 <login-config>        
  <auth-method>FORM</auth-method>
  <form-login-config>
   <form-login-page>/login.jsp</form-login-page>         <!--访问受包含的url时,先跳转到该页面-->
   <form-error-page>/error.jsp</form-error-page>        <!--判断用户没有权限访问时,跳转到该页面-->
  </form-login-config>
 </login-config>

 

通过以上配置,可以限定只有有DataManage角色权限的用户才能访问系统中所有包含.do的页面,从广义上讲即可限定哪些用户才能访问系统。

访问顺序:先跳转到 longin.jsp页面,页面提交后,进行安全检查,判断用户是否有权限,有权限再跳回原本访问的.do页面进行正常访问,否则跳到error.jsp

 

login.jsp页面部分代码:

 

<form name="loginForm" method="POST" action="j_security_check" >
<table>
<tr>
   <td><input type='text' name='username' ></td>
   <td><input type='text' name='password' ></td>
</tr>
<tr>
   <td><input type='submit' name='sub' ></td>
</tr>
</table>
</form>

注意: action="j_security_check" ,该action进行安全检查。(<security-constraint>的作用,该action在web.xml是不用定义的。。。直接用)

 

如本例子,用户表:

username    password                        

 test1           123456                      

 test2           123456

 test3           123456

.......

用户角色表:

username        role

 test1               guest

 test2               DataManage

 test3               DataManage

........

 

这样就表示test1用户不能访问系统,只有test2和test3才能访问系统      

分享到:
评论

相关推荐

    单点登录sso-shiro-cas-maven

    &lt;artifactId&gt;tomcat7-maven-plugin&lt;/artifactId&gt; &lt;version&gt;2.1&lt;/version&gt; &lt;configuration&gt; &lt;port&gt;8081&lt;/port&gt; &lt;uriEncoding&gt;UTF-8&lt;/uriEncoding&gt; &lt;server&gt;tomcat7&lt;/server&gt; &lt;path&gt;/node1&lt;/...

    scrypt-realm:Apache Tomcat 7 的安全领域

    Scrypt Tomcat 安全领域 Tomcat 的安全领域建立在 JDBCRealm 之上,它使用 Scrypt 密钥派生... &lt; id&gt;dextra-public-release&lt;/ id&gt; &lt; url&gt;https://dextranet.dextra.com.br/nexus/content/repositories/dextra-publi

    Spring Security 中文教程.pdf

    23.3. 为tomcat配置SSL 24. 替换验证身份 24.1. 概述 24.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. ...

    SpringSecurity 3.0.1.RELEASE.CHM

    22.3. 为tomcat配置SSL 23. 替换验证身份 23.1. 概述 23.2. 配置 A. 安全数据库表结构 A.1. User表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. PostgreSQL...

    Spring Security-3.0.1中文官方文档(翻译版)

    23.3. 为tomcat 配置SSL 24. 替换验证身份 24.1. 概述 24.2. 配置 A. 安全数据库表结构 A.1. User 表 A.1.1. 组权限 A.2. 持久登陆(Remember-Me)表 A.3. ACL 表 A.3.1. Hypersonic SQL A....

    tomcat同时使用http和https访问的配置方法

    具体配置可参考下面这段代码,注意&lt;Service name=”Catalina1″&gt;这个标签中的配置。 &lt;?xml version='1.0' encoding='utf-8'?&gt; &lt;Server port=8005 shutdown=SHUTDOWN&gt; &lt;Listener className=org.apache....

    apache-tomcat-5.5.17-src

    │ ch12.rar FORM验证登录文件,BASIC验证配置文件,Realm配置代码 │ ch13.rar Tomcat阀的使用(实例演示) │ ch14.rar JDBC资源(实例演示) │ ch17.rar 将Tomcat嵌入到Java中(实例演示) │ ch19...

    QuickPlace Realm class for Tomcat-开源

    用于tomcat的QuickPlace领域认证:这是一个领域类,可以将其配置为基于IBM / Lotus QuickPlace进行认证,并将在QuickPlace中返回用户ACL级别访问的角色。

    how-tomcat-works

    12.2 StandardContext的配置 98 12.2.1 StandardContext类的构造函数 98 12.2.2 启动StandardContext 99 12.2.3 invoke方法 99 12.3 StandardContextMapper类 100 12.4 对重载的支持 104 12.5 backgroundProcess方法...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    12.2 StandardContext的配置 98 12.2.1 StandardContext类的构造函数 98 12.2.2 启动StandardContext 99 12.2.3 invoke方法 99 12.3 StandardContextMapper类 100 12.4 对重载的支持 104 12.5 backgroundProcess方法...

Global site tag (gtag.js) - Google Analytics