zoukankan      html  css  js  c++  java
  • 【Head First Servlets and JSP】笔记 27: web 应用安全

    • 典型的安全问题:假冒者、窃听者、非法升级者
    • 认证方式: Base64 、摘要认证 、客户端证书、表单认证,重点熟悉摘要算法( HASH 、 MD5 等)
    • 安全机制:授权、认证、数据完整性、机密性
    • 80 端口、 443 端口
    • 通过 HTTP 、 HTTPS 传输数据的区别, SSL 等概念
    • 重放攻击、 SQL 注入等 

    【参考】

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <!-- Define servlets that are included in the web application -->
    
        <servlet>
            <servlet-name>jack</servlet-name>
            <servlet-class>sample.Jack</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>dog</servlet-name>
            <servlet-class>sample.Dog</servlet-class>
            <load-on-startup>2</load-on-startup>
            <security-role-ref>
                <role-name>VIP</role-name>
                <role-link>Member</role-link>
            </security-role-ref>
        </servlet>
    
    
        <servlet-mapping>
            <servlet-name>jack</servlet-name>
            <url-pattern>/abc/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>dog</servlet-name>
            <url-pattern>/abc/3</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>dog</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    
    
        <error-page>
            <exception-type>java.lang.Throwable</exception-type>
            <location>/WEB-INF/jsp/exception/common-exception.jsp</location>
        </error-page>
        <error-page>
            <error-code>404</error-code>
            <location>/WEB-INF/jsp/exception/404-exception.jsp</location>
        </error-page>
    
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>abc/3</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
        <security-role>
            <role-name>Admin</role-name>
        </security-role>
        <security-role>
            <role-name>Member</role-name>
        </security-role>
        <security-role>
            <role-name>Guest</role-name>
        </security-role>
    
        <!--<login-config>-->
            <!--<auth-method>BASIC 明文认证</auth-method>-->
        <!--</login-config>-->
        <!--<login-config>-->
            <!--<auth-method>DIGEST 摘要认证</auth-method>-->
        <!--</login-config>-->
        <!--<login-config>-->
            <!--<auth-method>CLIENT-CERT 客户端证书</auth-method>-->
        <!--</login-config>-->
        <login-config>
            <auth-method>FORM</auth-method>
            <form-login-config>
                <form-login-page>/loginPage.jsp</form-login-page>
                <form-error-page>/loginError.jsp</form-error-page>
            </form-login-config>
        </login-config>
    
        <security-constraint>
    
            <web-resource-collection>
                <web-resource-name>UpdateRecipe</web-resource-name>
                <url-pattern>/abc/3</url-pattern>
                <http-method>GET</http-method>
            </web-resource-collection>
    
            <auth-constraint>
                <role-name>Admin</role-name>
                <role-name>Member</role-name>
            </auth-constraint>
    
            <!--<user-data-constraint>-->
                <!--<transport-guarantee>CONFIDENTIAL</transport-guarantee>-->
            <!--</user-data-constraint>-->
            <!-- 对资源进行传输保证(不至于明文传输密码)
            tomcat 需要开启 8443 端口,并且需要一个证书,涉及到 HTTPS、SSL 等安全协议 -->
        </security-constraint>
    
    </web-app>

     loginPage.jsp :

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Authorization</title>
    </head>
    <body>
        <form method="post" action="j_security_check">
            <p><input type="text" name="j_username" /></p>
            <p><input type="secret" name="j_password" /></p>
            <p><input type="submit" value="Enter"></p>
        </form>
    </body>
    </html>

     Servlet :

    package sample;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class Dog extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html");
            PrintWriter out = resp.getWriter();
            if (req.isUserInRole("VIP")) { // 【授权】程序式授权,对应的是在 web.xml 中的声明式授权
                out.println("Only VIP can see.");
                out.println(req.getRemoteUser()); // 【认证】确认用户身份,打印出来是 username
            }
            out.println("he is not jack.");
        }
    }
  • 相关阅读:
    swiper获取当前的index ( loop=true时,)
    解决ios浏览器页面滚动到底部或顶部后,页面局部滑动失效的问题
    js实现全屏与退出全屏
    Ueditor 关于视频上传相关问题
    git拉取单个子目录
    XShell上传文件到Linux服务器上
    Debian中安装MySQL服务器
    lamda表达式的由来
    工具类--验证码工具类
    工具类--线程相关工具类
  • 原文地址:https://www.cnblogs.com/xkxf/p/7307415.html
Copyright © 2011-2022 走看看