锁定老帖子 主题:在Tomcat中使用容器提供的鉴别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-31
最后修改:2009-03-31
JSP页面往往在容器提供的一个运行时环境中执行。相应地,所有鉴别和访问控制都可以由容器处理,从而将应用开发人员解脱出来,而不必完成诸如实现适当安全控制等重要任务。安全性很难把握,因此作为起步,使用容器提供的机制往往是上选之策,这些机制已经经受了时间的考验,本文以Tomcat为例,简单的配置使用容器提供的鉴别功能。相关代码见附件。 一:首先创建项目项目目录结构
<form name="logonForm" method="post" action="j_security_check"> <table> <tr> <td>User Name:</td> <td><input type="text" name="j_username"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="j_password"></td> </tr> <tr colspan="2"> <td><input type="submit" value="login"></td> </tr> </table> </form> 其中action为j_security_check ,用户名为j_username ,密码为j_password 二:设置web.xml在web.xml文件添加以下配置信息 <security-constraint> <web-resource-collection> <web-resource-name>adminPage</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>admin</role-name> </security-role> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/login-error.html</form-error-page> </form-login-config> </login-config> <security-constraint>元素包含一个<web-resource-collection>元素,它定义了要保护的资源,还包含一个<auth-constraint>,这个元素包含一个角色名,定义了谁有权限访问这个资源。<security-constraint>使用url-patten来定于需要保护的URL地址。<security-role>元素定义了必须映射至容器安全域中的用户的所有角色名。<login-config>元素定义了需要使用的鉴别方式,以及与鉴别相关的信息。servlet容器支持4种鉴别方式,分别是BASIC,DIGEST,FORM,CLIENT-CERT,本文以最常见的FORM表单鉴别为例,其他鉴别方式请查看相应文档。<form-login-config>中指定了登陆页面和密码错误重定向到的页面。 三:配置安全域安全域是一个存储用户名,密码和角色名的数据库。servlet标准中不包含对安全域配置的描述,所以只能使用与容器相关的配置来指定安全域。 在Tomcat中,可以指定多种安全域,包括JDBCRealm,DataSourceRealm,JNDIRealm,MemoryRealm,JAASRealm。本文配置JDBCRealm安全域使用mysql数据库存储用户信息。关于其他安全域的配置,请查看Tomcat文档 。 安全域配置信息可以放置在Tomcat配置文件<Engine>或<Host>元素中作为全局安全域,供多个应用程序使用。也可以放置在WEB-INF/context.xml文件<Context>元素中,供当前应用程序使用。context.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="hotweb"> <Realm className="org.apache.catalina.realm.JDBCRealm" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/hotweb" connectionName="root" connectionPassword="root" userTable="users" userNameCol="user_name" userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name" /> </Context> <Realm>元素配置为使用mysql数据库保存鉴别信息。mysql数据库表结构为: create table users ( user_name varchar(15) not null primary key, user_pass varchar(15) not null ); create table user_roles ( user_name varchar(15) not null, role_name varchar(15) not null, primary key (user_name, role_name) ); userTable元素指定用户表,userNameCol和userCredCol分别指定用户名和密码的列名。userRoleTable指定角色表,roleNameCol指定角色名列名。注意userNameCol指定的用户列名在两个表中必须相同。插入测试数据 insert into users values('admin','admin');
启动浏览器访问http://localhost:8080/hotweb/admin/security.html,重定向到登陆页面,使用admin,admin登陆。登陆错误则重定向到login-error.html。相关代码见附件。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1651 次