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才能访问系统
分享到:
相关推荐
`<Server>`元素是整个Tomcat实例的顶级容器,它由`org.apache.catalina.Server`接口定义。此元素有两个主要属性: - `port`: 指定Tomcat用于接收关闭命令的端口,默认为8005。 - `shutdown`: 指定发送给该端口的...
`<Server>`元素作为Tomcat实例的顶级配置节点,负责定义整个Tomcat容器的基本结构和功能。此元素由`org.apache.catalina.Server`接口定义,并且在配置文件中只能出现一次。 - **属性详解**: - **`className`**: ...
在server.xml中配置 Realm,实现用户认证,如使用`MemoryRealm`或连接到数据库的`JDBCRealm`。还可以配置`Context`元素中的` Valve`来实现请求过滤和日志记录。 6. **性能优化**: - 调整`Connector`的线程池参数...
`<Server>`元素是Tomcat实例的最高层级元素,代表整个容器。它由`org.apache.catalina.Server`接口定义,并且仅能包含一个`<Service>`元素。此元素本身不能作为其他元素的子元素。通过以下关键属性进行配置: - **...
<realm-name>SessiontestRealm</realm-name> </login-config> ``` 2. **FORM认证**: ```xml <login-config> <auth-method>FORM</auth-method> <realm-name>SessiontestRealm</realm-name> <form-login-...
`<Logger>`元素配置日志记录,`<Realm>`元素则用于定义用户认证和授权的数据库。这些元素对于服务器的安全性和性能监控至关重要。 ### 总结 server.xml是Tomcat服务器的灵魂,正确理解和灵活配置这些元素是优化...
3. <Connector> 标签:用于配置Tomcat接收客户端请求的接口信息,比如端口号、协议等。 - tomcatPort:Tomcat内部用于监听的端口号。 - protocol:指定使用的协议,如HTTP/1.1。 - minProcessors:连接器在启动时...
`<Server>`标签是`server.xml`的顶级标签,它定义了整个Tomcat服务器的生命周期管理。其中两个关键属性是`port`和`shutdown`: - **port**:指定一个端口,用于监听关闭Tomcat的请求,默认为8005。这意味着,如果你...
<groupId>com.hellotomcat</groupId> <artifactId>springboot-shiro</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 继承 spring boot 的默认父工程 --> <parent> <groupId>org.springframework.boot...
首先,`<Server>`元素是整个配置的顶级容器,它定义了Tomcat实例的基本属性。通过`port`属性设置服务器监听关闭请求的端口号,通常设置为8005,`shutdown`属性用于指定关闭服务器的命令字符串,如"SHUTDOWN"。此外,...
7. `<Server>` 元素作为顶级容器,包含一个或多个 `<Service>` 元素,定义了 Tomcat 服务器的基本配置,如 shutdown 命令端口和字符串。 总之,`server.xml` 文件是 Tomcat 配置的核心,通过精细调整这些元素的属性...
1. **用户认证**:使用`<Realm>`元素定义认证机制,如`MemoryRealm`或`DataSourceRealm`,并配置相应的用户名和密码。 2. **访问控制**:在`<Context>`或`<Resource>`元素内使用`<Valve>`标签添加访问控制阀门,如`...
4. `<CATALINA_HOME>/server`: 包含Tomcat的核心服务器组件,如`server.xml`配置文件,以及管理应用程序(如`admin`和`manager`)。`server/webapps`下的应用是专门为服务器操作设计的,例如监控和管理。`lib`子目录...
<groupId>com.hellotomcat</groupId> <artifactId>springboot-shiro</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 其他配置省略... --> <dependencies> <!-- web支持 --> <dependency> <groupId>...
8. `<Realm>`:认证组件,存储用户信息和角色。`className`定义Realm类,实现`org.apache.catalina.Realm`接口。 9. `<Valve>`:阀门组件,类似于过滤器,用于处理请求或响应。`className`定义阀门类,如`...
4. **安全设置**:为了增强安全性,应配置$CATALINA_HOME/conf/server.xml中的<Realm>元素,实现用户身份验证。同时,考虑启用SSL,修改<Connector>元素添加SSL配置,并生成和配置keystore文件。 【管理Tomcat】 1...
使用`<Realm>`元素可以实现基于角色的访问控制和用户身份验证。Tomcat支持多种认证机制,如Basic、Form、Digest等。 5. **日志记录**: 每个虚拟主机可以有自己的日志文件,通过`<Valve>`元素配合`AccessLog ...