Tomcat自带权限认证

       平时课堂上的方法都是用户输入账号密码然后到数据库中去匹配,整个过程都是我们自己写代码去完成的。但是servlet容器例如tomcat本身就带了这种认证的功能,而且很强大,甚至能控制到每个类每个方法。下面我们讨论一下最常用的基于Form表单的认证方式。

一、建立数据库,以 mysql 数据库为例:

CREATE DATABASE DEMO

二、建立表,表一共有三个,一个是用户表 userinfo,保存用户名和密码;一个是权限userrole,表保存权限角色;还有一个是用户和权限对照的表user_roles;
CREATE TABLE `userinfo` (
  `username` varchar(45) NOT NULL,
  `password` varchar(45) NOT NULL,
  UNIQUE KEY `username_UNIQUE` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `userrole` (
  `role` varchar(20) NOT NULL,
  UNIQUE KEY `iduserrole_UNIQUE` (`role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_roles` (
  `username` varchar(45) NOT NULL,
  `role` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

三、向表中插入数据

INSERT INTO `userinfo` VALUES ('user1','password1');
INSERT INTO `userrole` VALUES ('admin');
INSERT INTO `user_roles` VALUES ('user1','admin');

四、新建一个web工程 创建web工程

五、配置tomcat配置文件server.xml

在 <GlobalNamingResources></GlobalNamingResources>标记之间加入如下代码:

<Resource auth="Container" 
    description="User database that can be updated and saved" 
    factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
    name="UserDatabase" pathname="conf/tomcat-users.xml"
    type="org.apache.catalina.UserDatabase"/>
<Resource auth="Container" 
    driverClassName="com.mysql.jdbc.Driver" 
    type="javax.sql.DataSource"
    maxActive="4"
    name="jdbc/demo" 
    password="数据库密码" 
    url="jdbc:mysql://localhost:3306/demo" 
    username="root" 
    validationQuery="select 1 from userinfo"/>

在  <Engine defaultHost="localhost" name="Catalina"></Engine>标记之间加入如下代码:

<Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.DataSourceRealm"
    dataSourceName="jdbc/demo" 
    roleNameCol="ROLE" 
    userCredCol="PASSWORD" 
    userNameCol="USERNAME" 
    userRoleTable="USER_ROLES" 
    userTable="USERINFO"/>
</Realm>

 六、配置web.xml,描述需要保护的资源,以及需求的权限:

 

<security-constraint>
  	<web-resource-collection>
  		<web-resource-name>Protected Area</web-resource-name>
  		<url-pattern>/*</url-pattern>
  		<http-method>DELETE</http-method>
  		<http-method>GET</http-method>
  		<http-method>POST</http-method>
  		<http-method>PUT</http-method>
  	</web-resource-collection>
  	<auth-constraint>
  		<role-name>admin</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>
      <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
  </login-config>
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/demo</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

 七、建立登陆界面login.jsp(根据上面<form-login-page>中的配置)

<form action="j_security_check">
用户名<input name="j_username" id="j_username" type="text" />
密码<input name="j_password" id="j_password" type="password"/>
<input type="submit"   value="登录" />
</form>

注意:form标签的action值必须为j_security_check,同样用户名的name属性值必须为j_username,密码的name属性必须为j_password

八、建立登陆失败界面error.jsp

ERROR

页面随便写一些登陆失败的提示即可。

九、启动tomcat服务器

十、测试:

在浏览器输入http://localhost:8080/demo/index.html

这时就会跳转到登陆界面login.jsp,输入用户名和密码后tomcat会根据server.xml配置文件中指定的表和列去进行认证,认证成功即用户名、密码、权限均正确则返回用户请求的资源,例如上面的地址请求的index.html。如果用户名、密码、权限有一个不正确则不能认证成功。

十一、备注:

tomcat的认证十分强大,除包含Form表单的认证方式之外还包含智能卡等认证方式,通过对web.xml的配置可以精确的限制各种资源的访问权限。如果读者有兴许可以继续深入探索

 

 

 

转载于:https://my.oschina.net/ccdvote/blog/68213

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值