设为首页 收藏本站
查看: 555|回复: 0

[经验分享] 在Tomcat中使用容器提供的鉴别

[复制链接]

尚未签到

发表于 2017-2-5 14:09:46 | 显示全部楼层 |阅读模式
  JSP页面往往在容器提供的一个运行时环境中执行。相应地,所有鉴别和访问控制都可以由容器处理,从而将应用开发人员解脱出来,而不必完成诸如实现适当安全控制等重要任务。安全性很难把握,因此作为起步,使用容器提供的机制往往是上选之策,这些机制已经经受了时间的考验,本文以Tomcat为例,简单的配置使用容器提供的鉴别功能。相关代码见附件。

一:首先创建项目
  项目目录结构
http://mshijie.iteye.com/upload/attachment/89382/cdf0ac48-064f-38c0-885c-0a38be56ec4b.jpg
 其中admin目录为需要进行访问控制的,login.html为登陆页面。login登陆界面使用表单向容器提供鉴别信息。表单内容如下:


<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');
insert into user_roles values('admin','admin');
  启动浏览器访问http://localhost:8080/hotweb/admin/security.html,重定向到登陆页面,使用admin,admin登陆。登陆错误则重定向到login-error.html。相关代码见附件。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-337883-1-1.html 上篇帖子: 使用tomcat把应用程序注册成Windows服务3 下篇帖子: Tomcat可以正常启动,但jsp页面打不开
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表