目录
很久没有更新 CSDN 博客了,原因是搭建了个人博客网站,但现在决定还是同步到 CSDN
希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!?
个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser's Blog
参考:JAVAEE的核心-Servlet_javaee servlet-CSDN博客
1、解释
Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet 可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
2、创建和使用 Servlet
关于 web.xml:
关于 url-pattern 匹配模式:
以下是使用 @WebServlet 配置 Servlet 路由的示例:
以下是在 web.xml 中配置 Servlet 路由的示例:
以下是测试 doGet 方法,浏览器 GET 方式请求 http://localhost:8080/demo1/index?name=ch4ser,页面和控制台都会有打印输出。
同理,可以测试 doPut、doDelete 等方法。
3、Servlet 的生命周期
以下是测试 init、service、destroy 方法:
当浏览器 GET 方式请求 http://localhost:8080/demo1/index?name=ch4ser,IDEA 控制台输出:
---------Init---------
---------Servlet Service---------
---------Http Service---------
--------doGET---------
当 Tomcat 服务器关闭时,IDEA 控制台输出:---------Destroy---------
注意上面两个不同的 service 方法:
HttpServlet
中定义的方法。用于处理 HTTP 请求和响应所以,如果只需要处理通用的请求和响应,可以使用service(ServletRequest req, ServletResponse res)方法。
而如果需要处理HTTP请求和响应,可以使用service(HttpServletRequest req, HttpServletResponse resp)方法,它提供了更多的HTTP相关的功能和信息。
1、原生态数据库开发:JDBC
参考:JavaEE-JDBC基础 - 简书 (jianshu.com)
JDBC:由 Java 提供,用于访问数据库的统一 API 接口规范。
数据库驱动:由各个数据库厂商提供,用于访问数据库的 jar 包(JDBC的具体实现),遵循 JDBC 接口,以便 Java 程序员使用。
使用 JDBC 操作数据库:
以下是一段使用 JDBC 操作数据库的简单代码:
2、持久层框架 Mybatis
MyBatis是一种持久层框架,用于将Java对象映射到关系数据库中的数据。它提供了一种将SQL语句与Java对象进行映射的简单方法,从而减少了开发人员编写和维护传统JDBC代码的工作量。
MyBatis的核心是一个基于XML的配置文件,其中定义了数据库连接信息、SQL语句和结果映射规则。开发人员可以通过编写简单的XML文件来定义SQL语句,并在Java代码中使用MyBatis的API来执行这些SQL语句。
MyBatis提供了丰富的功能,包括动态SQL、批处理、缓存、插件扩展等。它支持多种数据库,包括MySQL、Oracle、SQL Server等。同时,MyBatis还提供了与Spring等常用框架的集成支持,使得在企业应用中使用MyBatis变得更加方便。
总的来说,MyBatis是一种简单易用、功能丰富的Java持久层框架,可以帮助开发人员更轻松地进行数据库访问操作。
1、预编译原理
提前编译好执行逻辑或语义,攻击者所注入的语句并不会改变原有的逻辑或语义,从而预防 SQL 注入。
2、写法示例
3、不安全的写法和预编译写法的对比
//不安全写法
String unsafe_sql = "select * from stu where id="+s;
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(unsafe_sql);
//预编译写法
String safe_sql = "select * from stu where id=?";
PreparedStatement preparedStatement = connection.prepareStatement(safe_sql);
preparedStatement.setString(1,s);
ResultSet rs = preparedStatement.executeQuery();
1、解释
Filter 被称为过滤器,实质上就是对 Web 资源进行拦截,做一些处理后再交给下一个过滤器或 Servlet 处理。
通常是用来拦截 Request 请求进行拦截处理的,但也可以对返回的 Response 进行拦截处理。
开发人员使用 Filter 技术,可以实现对所有 Web 资源的管理,如实现权限访问控制、过滤敏感词汇、压缩响应信息等。
在讲如何创建和使用 Filter 之前,先来看看完整的请求、响应的过程:
2、Filter 生命周期
下面通过一段 Servlet 和一段 Filter 代码来验证一下 Filter 的生命周期。
这是 Servlet 的代码:
这是 Filter 的代码:
这是 web.xml 的配置:
验证结果:
这里 Filter 是 implements 而不是 extends,以下是二者的区别:
但此时访问 /test?code=xxx,发现页面并没有输出 xxx,这是由于我们没有在 doFilter 方法里写上放行的代码,其默认全部禁止。
3、使用 doFilter 实现简单拦截过滤
这里修改 doFilter 方法,实现一个简单的 XSS 攻击拦截过滤:接收参数值,如果没有攻击 payload 就放行,有的话则拦截。
验证结果:
4、使用 doFilter 实现简单身份访问控制
以下为 Servlet 的代码,模拟一个管理员界面:
以下为 Filter 的代码,根据 cookie 判断是否为管理员,若是则放行,反之则拦截:
以下是 web.xml 的配置:
验证结果:
5、Filter 过滤器的安全场景
内存马参考:深入浅出内存马(一) (qq.com)
1、解释
参考:JavaWeb监听器_javaweb 监听器-CSDN博客
监听器是Servlet规范中定义的一种特殊类,简单来说就是监听操作。
2、使用 Listener 监听 Session 的创建、销毁
创建两个 Servlet:CreateSession、DestroySession
CreateSession 用来创建 Session:
DestroySession 用来销毁 Session:
创建一个 Listener:ListenSession,用来监听 Session 的创建、销毁
注意:配置 Listener 路由时不需要加路径,因为 Listener 不是以访问路径触发的
验证结果:
3、Listen 监听器的安全场景
Listen 在安全方面涉及的比较少,不像 Filter 涉及的比较多,但还是有这种类型的内存马。