zoukankan      html  css  js  c++  java
  • 为tomcat页面设置访问权限(BASIC认证)

    在web应用中,对页面的访问控制通常通过程序来控制,流程为:
    登录 -> 设置session -> 访问受限页面时检查session是否存在,如果不存在,禁止访问

    对于较小型的web应用,可以通过tomcat内置的访问控制机制来实现权限控制。采用这种机制的好处是,程序中无需进行权限控制,完全通过对tomcat的配置即可完成访问控制。

    为了在tomcat页面设置访问权限控制,在项目的WEB-INFO/web.xml文件中,进行如下设置:

     

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="WebApp_ID" version="2.5">
     6     <display-name>webAuthentification</display-name>
     7     <welcome-file-list>
     8         <welcome-file>index.html</welcome-file>
     9         <welcome-file>index.htm</welcome-file>
    10         <welcome-file>index.jsp</welcome-file>
    11         <welcome-file>default.html</welcome-file>
    12         <welcome-file>default.htm</welcome-file>
    13         <welcome-file>default.jsp</welcome-file>
    14     </welcome-file-list>
    15     <security-constraint>
    16         <web-resource-collection>
    17             <web-resource-name>admin</web-resource-name>
    18             <url-pattern>/views/admin/*</url-pattern>
    19         </web-resource-collection>
    20         <auth-constraint>
    21             <role-name>admin</role-name>
    22         </auth-constraint>
    23     </security-constraint>
    24     <security-constraint>
    25         <web-resource-collection>
    26             <web-resource-name>user</web-resource-name>
    27             <url-pattern>/views/user/*</url-pattern>
    28         </web-resource-collection>
    29         <auth-constraint>
    30             <role-name>user</role-name>
    31         </auth-constraint>
    32     </security-constraint>
    33 
    34     <login-config>
    35         <auth-method>BASIC</auth-method>
    36         <realm-name>TOMCAT BASIC认证</realm-name>
    37     </login-config>
    38 
    39     <security-role>
    40         <role-name>admin</role-name>
    41     </security-role>
    42     <security-role>
    43         <role-name>user</role-name>
    44     </security-role>
    45 </web-app>

     

    其中,<url-pattern>中指定受限的url,可以使用通配符*,通常对整个目录进行访问权限控制。
    <auth-constraint>中指定哪些角色可以访问<url-pattern>指定的url,在<role-name>中可以设置一个或多个角色名。

    使用的角色名来自tomcat的配置文件${CATALINA_HOME}/conf/tomcat-users.xml。

    <login-config>中设置登录方式,<auth-method>的取值为BASIC或FORM。如果为BASIC,浏览器在需要登录时弹出一个登录窗口。如果为FORM方式,需要指定登录页面和登录失败时的提示信息显示页面。

     

    ${CATALINA_HOME}/conf/tomcat-users.xml中添加下面的 角色和用户

     

    1 <tomcat-users>
    2     <role rolename="admin"/>
    3     <role rolename="user"/>
    4     <user username="admin" password="123456" roles="admin,user"/>
    5     <user username="system" password="system" roles="admin"/>
    6     <user username="user" password="user" roles="user"/>
    7 </tomcat-users>

     

    如上,共2个角色admin和 user。

    3个用户,admin在角色admin和user下,system在admin角色下,user在user角色下。

    我的测试工程有2个文件webAuthentification/views/admin/index.jsp和webAuthentification/views/user/index.jsp,用来测试admin和user这2个角色。

    部署到tomcat,然后启动tomcat,并打开浏览器,输入http://localhost:8080/webAuthentification/views/admin/index.jsp,回车。

    此时浏览器会弹出一个窗口提示你输入用户名和密码,如下:

    用户名和密码分别输入admin/123456,确定。

    访问admin/index.jsp页面Ok,页面显示:

    Hello,Admin!!!
    auth:Basic YWRtaW46MTIzNDU2
    user:admin
    pass:123456

    那访问user/index.jsp呢?

    页面显示:

    Hello,user!!!

    因为admin用户同时拥有admin和user的角色,所以都可以访问。

    关闭浏览器,打开admin/index.jsp,输入system/system,

    页面显示:

    Hello,Admin!!!
    auth:Basic c3lzdGVtOnN5c3RlbQ==
    user:system
    pass:system

    再访问user/index.jsp:

    页面显示:

    HTTP Status 403 - Access to the requested resource has been denied

    因为system用户没有user角色。

    当然了,user用户就只能访问user/index.jsp。

    附admin.jsp:

     1 <?xml version="1.0" encoding="GB18030" ?>
     2 <%@ page language="java" contentType="text/html; charset=GB18030"
     3     pageEncoding="GB18030"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     5 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
     8 <title>Admin Index Page</title>
     9 </head>
    10 <body>
    11     Hello,Admin!!!
    12     <br>
    13     <%
    14         String auth_user = null;
    15         String auth = request.getHeader("Authorization");
    16         String encoded = auth.substring(6);
    17         sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
    18         String decoded = new String(dec.decodeBuffer(encoded));
    19         String[] userAndPass = decoded.split(":", 2);
    20         auth_user = userAndPass[0];
    21         session.setAttribute("user",auth_user);
    22     %>
    23     auth:<%=auth%><br>
    24     user:<%=userAndPass[0] %><br>
    25     pass:<%=userAndPass[1] %>
    26 </body>
    27 </html>

    文章参考http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html

     

     

  • 相关阅读:
    RabbitMQ——CLI 管理工具 rabbitmqadmin
    RabbitMQ——Fedration插件
    RabbitMQ——使用Shovel插件迁移数据
    Http——HttpClient使用
    Http——Keep-Alive机制
    Http——HttpURLConnection详解
    Kafak——日志数据策略
    Keepalived + LVS 搭建高可用负载均衡
    TCP——抓包分析
    常见的网络端口
  • 原文地址:https://www.cnblogs.com/luckystar2010/p/3482476.html
Copyright © 2011-2022 走看看