tomcat 7 设置jdbc领域

完整的配置

  <Realm className="org.apache.catalina.realm.JDBCRealm" 
         driverName="com.mysql.jdbc.Driver" 
         connectionURL="jdbc:mysql://localhost:3306/数据库名称?user=用户名&password=密码" 
         userTable="A" userNameCol="B" userCredCol="C" 
         digest="MD5" 
         userRoleTable="D" roleNameCol="E"/>

1.角色(Role)

可以在web.xml中也可以在tomcat目录中的conf/tomcat-users.xml中设置,示例:

web.xml中

<security-role>
    <role-name>dude</role-name>
</security-role>

tomcat7(安装目录)/conf/tomcat-users.xml

    ...
    <role rolename="tomcat"/>
    <role rolename="role1"/>
</tomcat-users>

不论在哪里设置角色,角色名都可以多个,角色名就像一个标签,它把用户聚集在一起,如果没有角色,就成了领域对多个未知的帐户.

2.用户表

在此只说jdbc,当然要说表了,表就是你的用户都在哪放着,tomcat只要求你提供表名(A),登陆时使用的用户名(B)在哪个列可以找到,登陆时使用的密码(C)在哪个列可以找到,

userTable="A" userNameCol="B" userCredCol="C"
多说两点:

1.用户表可有更多的列,只不过tomcat实现的ServletSecurity只关心这两列(用户名和密码),当然这是在认证为表单的前提下,如果你的应用不是基于表单认证,可以不要继续看下去.如果是,你的web.xml一定要有以下配置

  ...
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Tomcat Host Manager Application</realm-name>
    <form-login-config>
    	<form-login-page>/login.html</form-login-page>
    	<form-error-page>/deny.html</form-error-page>
    </form-login-config>
  </login-config>
</web-app>

以上是自定义表单,也是本文的基础.login.html中的表单元素你不可以更改,样式和布局还是着情美化的,login.html的表单

<form action="j_security_check" method="post">
name:<input name="j_username" />
password:<input type="password" name="j_password" />
<input type="submit" value="denglu" />
</form>

2.digest

如果没有这个属性,用户的密码是需要明文存储的,这显然是不能接受的,digest的值还决了你的密码列的数据类型或数据长度,可选的值为:SHA, MD2, or MD5,她的说明:

When a standard realm authenticates by retrieving the stored password and comparing it with the value presented by the user, you can select digested passwords by specifying the digest attribute on your <Realm> element. The value for this attribute must be one of the digest algorithms supported by the java.security.MessageDigest class (SHA, MD2, or MD5). When you select this option, the contents of the password that is stored in the Realm must be the cleartext version of the password, as digested by the specified algorithm
http://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html#Digested_Passwords


有了用户,有了角色,还要定义用户和角色之间的关系,就是用户要有哪些角色

userRoleTable="D" roleNameCol="E"

这行就是解决这个问题,D表示这个用户和角色的中间表名,E表示,我们定义的角色在哪个列可以找到

到此配置的部分可说的就结束了,有了角色,有个用户,有了用户和角色的关系,还要定义角色可以访问到的资源(当然包括url了),这个由你自已根据项目的情况着情配置,一个示例

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Wildcard means whole app requires authentication</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>dude</role-name>
    </auth-constraint>
...
</security-constraint>


关于配置的更多阅读可查看servlet规范,为什么这么作?登陆后怎么取得用户信息,这些都可以在规范中找到,不言而知的答案是你至少少写一个过滤器,判断用户是否在线,是否有操作这项功能的权利,而这些都由规范和tomcat来为你效劳了

你可能感兴趣的:(java,tomcat,jdbc,认证,授权)