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

[经验分享] Tomcat容器管理之安全防护

[复制链接]

尚未签到

发表于 2015-8-10 11:25:29 | 显示全部楼层 |阅读模式
  当我们对Web应用程序中受保护的资源进行控制时,可以通过两种方式来实现:第一种方式就是通过应用程序管理的安全防护,如编写安全验证代码;第二种方式就是通过Tomcat容器管理的安全防护。下面我们将对第二种方式进行简单的介绍。
  领域
  要使用Tomcat的容器管理的安全防护机制,就须要设定领域(Realm)。领域是用户、密码及角色的集合。Web应用程序可以在/WEB-INF/web.xml 中进行设置,设定哪些用户组可以访问哪些资源,Tomcat管理员可以使用一个或多个领域来获取用户、密码及角色信息。Tomcat含有4种领域实现:UserDatabaseRealm,JDBCRealm,JNDIRealm,JAARealm。Java开发者可以创建额外的领域实现,以便作为与其用户和密码的接口。如欲指定应该使用何种领域,请在$CATALINA_HOME/conf/server.xml中插入Realm元素(或者在/META-INF/context.xml),其中className属性设定你想使用的领域,然后通过该实现的自定义属性以提供此领域相关的配置信息:

  注意:Tomcat的Realm API无法用来添加或移除用户,这不是Realm接口的一部分。因此需要自己想办法来添加或从领域中移除用户,除非您决定使用的领域刚好实现了这些功能。
  UserDatabaseRealm(tomcat默认领域)
  它是从静态文件加载到内存中的,直到Tomcat停止后才从内存中清除。也就是说,权限文件只会在启动时读取一次。在UserDatabaseRealm中分配权限的默认文件为$CATALINA_HOME/conf目录中的tomcat-users.xml。如果更改了其中的配置,需要重启Tomcat。tomcat-users.xml是此领域的关键,根元素是tomcat-users,而且只能使用role及user元素。每个role元素只有一个属性:rolename。每个user元素有3个属性:username,password及roles,如图所示。






  UserDatabaseRealm
  这是使用关系数据库的领域。用户、密码及角色都保存在数据库中,而JDBCRealm会马上访问他们。例如,假设现成的管理软件在关系数据库的数据表中新增一个账号,JDBCRealm就会立刻访问它。

  JNDIRealm
  如果需要让Tomcat从LDAP目录中取得用户名、密码及角色,则可以使用此领域。JNDIRealm是非常有弹性的Realm实现,可以依据用户名、密码及角色的LDAP目录来验证用的省份,同时还允许该数据库用于许多不同的模式布局。JNDIRealm可以递归地搜寻LDAP的层次目录,直到找到所需的信息为止,或者可以设定在目录服务器的特定位置中寻找。
  JAASRealm
  JAASRealm是经由JAAS(Java Authentication and Authorization Service,Java验证与授权服务)验证用户的一种领域实现。JAAS实现了标准的“可插入式验证模块”(PAM)架构,此架构可让应用程序独立于验证实现之外。可以不经修改应用在程序本身而只需稍微修改应用程序的配置设定,在应用程序中插入全新或更新的验证实现。
  容器管理的安全防护
  当我们访问受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式。Tomcat支持四种容器管理的安全防护,而每种类型都以不同的方式取得身份:


  • 基本验证 通过HTTP验证,需要提供base64编码文本的用户口令。
  • 摘要验证 通过HTTP验证,需要提供摘要编码字符串的用户口令。
  • 表单验证 在网页的表单上要求提供用户密码。
  • Client-cert验证 以客户端数字证书来确认用户的身份。
  前三种验证方式类似而且比较简单,第4种验证方式可以参考相关书籍,我们以表单验证来说明前3种的使用方法,另外领域采用JDBCRealm。


  • 在/META-INF下新建context.xml,代码如下:




  • 数据库代码(参考tomcat-doc中代码)
    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)
    );

  • 在/WEB-INF/web.xml 中设置受保护的资源。
      

    test
    /admin/*


    admin



    FORM

    /login.jsp
    /error.jsp



    admin

  •   login.jsp代码(省略了部分代码,注意其中form的action属性以及input的name属性都是固定格式)






    Please Enter Your User Name:

    Please Enter Your Password:







  上面省略了一些文件,比如error.jsp,index.jsp等。当Tomcat容器发现未登陆用户访问受保护(/admin/*下)的资源时,就会将form-login-page下的/login.jsp显示给用户。用户输入登陆信息后,Tomcat就会通过JDBCRealm访问数据库的用户、密码及角色信息。如果验证成功则转到受保护的资源;如果用户登陆尝试失败,则form-error-page表示的error.jsp就会显示给用户。
  

运维网声明 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-96925-1-1.html 上篇帖子: 【转】配置远程jconsole监测tomcat 下篇帖子: tomcat 优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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