Doodle 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Doodle 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Doodle 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开源组织
地区 国产
投 递 者 zzzzbw
适用人群 未知
收录时间 2019-02-26

软件简介

doodle是一个简易的 Java MVC 框架,它提供了类似于spring 的Bean容器、IOC、AOP、MVC等功能。

代码简洁、轻量,适合用于参考学习spring。

  • 一行代码即可启动服务,内置Tomcat容器。
  • DispatcherServlet请求逻辑处理采用责任链模式,方便增加修改规则。
  • 不使用XML配置,完全注解开发。
  • IOC容器,解决循环依赖注入问题。
  • 支持多AOP增强,切点支持aspectj表达式。

约束

doodle暂时功能没有完善,在使用过程中有一些约束条件

  • 被Bean容器接管的类都有无参的构造方法且构造方法不是私有的
  • @Component只应用于类,应用于接口或抽象类将无效
  • 每个Controller@RequestMapping标注的方法,其参数必须必须被@RequestParam注解,且参数必须是java的基本数据类型或者基本数据的包装类(如int,Integer等)

示例代码

  1. git clone https://github.com/zzzzbw/doodle.git 或直接下载代码到本地

  2. 将项目导入到IDE中,这是maven工程,确保你已经安装maven

  3. 执行doodle-example/src/main/java下的github.zzzzbw.App类的main()方法即可启动Tomcat服务器。

  4. 浏览器访问http://localhost:9090/user/listhttp://localhost:9090/user/detail?id=1链接

  5. 通过'Postman'等工具用post方式请求到链接http://localhost:9090/user/add?name=zzzzbwhttp://localhost:9090/user/delete?id=1修改数据

使用方式

引入依赖

创建一个 maven 项目,引入核心依赖。

<dependency>
  <groupId>com.github.zzzzbw</groupId>
  <artifactId>doodle-core</artifactId>
  <version>0.1</version>
</dependency>

启动类:

public class App {
    public static void main(String[] args) {
        Doodle.run(App.class, 9090);
    }
}

IOC使用

使用方式与spring基本一致,不过只支持类型注入,即如果被注入对象为类,则注入其实例,如果被注入对象为接口,则注入其实现类。

@Component
public class EmailComponent {
    // do something
}

UserController注入EmailComponent

@Controller
public class UserController {
    @Autowired
    private EmailComponent emailComponent;
    // do something
}

AOP使用

  • 增强处理类必须实现MethodBeforeAdvice,AfterReturningAdvice,ThrowsAdvice,AroundAdvice中的一个或者多个接口
  • 增强处理类被@Aspect注解,且有正确的aspectj切点表达式
  • (可选)@Order注解来决定增强处理类的先后顺序
@Order(1)
@Aspect(pointcut = "@within(Controller)")
public class Aspect1 implements AroundAdvice {
    @Override
    public void afterReturning(Class<?> clz, Object returnValue, Method method, Object[] args) throws Throwable {
        // do something
    }
    @Override
    public void before(Class<?> clz, Method method, Object[] args) throws Throwable {
        // do something
    }
    @Override
    public void afterThrowing(Class<?> clz, Method method, Object[] args, Throwable e) {
        // do something
    }
}
@Order(2)
@Aspect(pointcut = "@within(Controller)")
public class Aspect2 implements AroundAdvice {
    @Override
    public void afterReturning(Class<?> clz, Object returnValue, Method method, Object[] args) throws Throwable {
        // do something
    }

    @Override
    public void before(Class<?> clz, Method method, Object[] args) throws Throwable {
        // do something
    }

    @Override
    public void afterThrowing(Class<?> clz, Method method, Object[] args, Throwable e) {
        // do something
    }
}

上面两个增强处理类Aspect1Aspect2,会增强被@Controller注解的类下的方法,且顺序为:

Aspect1@before()->Aspect2@before()->method.invoke()->Aspect2@afterReturning()->Aspect1@afterReturning()。

Controller使用

使用几乎与spring一致

返回String类型的则返回jsp页面的路径,返回ModelAndView则在其view中设置jsp页面路径,同时可以传一些参数给jsp页面。

@ResponseBody注解的则返回的是json格式数据。

@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public ModelAndView getUserList() {
        List<User> list = userService.getUser();
        return new ModelAndView().setView("user_list.jsp").addObject("list", list);
    }

    @RequestMapping(value = "/detail", method = RequestMethod.GET)
    public ModelAndView getUser(@RequestParam(value = "id") long id) {
        User user = userService.getUserById(id);
        return new ModelAndView().setView("user_detail.jsp").addObject("user", user);
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    @ResponseBody
    public Result<User> addUser(@RequestParam(value = "name") String name) {
        User user = userService.addUser(name);
        return new Result<>(user, 0, "");
    }

    @RequestMapping(value = "/delete", method = RequestMethod.POST)
    @ResponseBody
    public Result<String> deleteUser(@RequestParam(value = "id") long id) {
        userService.deleteUser(id);
        return new Result<>("success", 0, "");
    }
}

详解

结语

本项目不仅参考了spring-boot,同时还参考了:

这些都是国人写的更轻量而且也很优秀的框架,相比spring-boot来说阅读源码的难度会小一些。感谢这些框架给我提供学习的思路,同时给我们更多的选择。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(4) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
Apache Tomcat 资源管理错误漏洞
拒绝服务
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 漏洞版本中攻击者通过发送大量特制的 HTTP/2 请求序列会触发高 CPU 使用率,导致服务器变得无响应。
CVE-2020-11996 MPS-2020-9541
2022-08-08 19:18
Apache Tomcat跨站脚本漏洞
XSS
Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat中存在跨站脚本漏洞,攻击者可利用该漏洞执行客户端代码。
CVE-2019-0221 MPS-2019-5944
2022-08-08 19:18
Apache Tomcat 资源管理错误漏洞
加锁机制不恰当
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 在漏洞版本中因为没有WINDOW_UPDATE为连接窗口发送消息,客户端能够导致服务器端线程阻塞。攻击者可利用该漏洞造成拒绝服务(线程耗尽)。
CVE-2019-10072 MPS-2019-7027
2022-08-08 19:18
Apache Log4j 安全漏洞
当攻击者对 Log4j 配置具有写访问权限时,Log4j 1.2 中的 JMSAppender 容易受到不受信任数据的反序列化。攻击者可以提供 TopicBindingName 和 TopicConnectionFactoryBindingName 配置,导致 JMSAppender 执行 JNDI 请求,从而以类似于 CVE-2021-44228 的方式执行远程代码。请注意,此问题仅在专门配置为使用 JMSAppender(不是默认设置)时影响 Log4j 1.2。 Apache Log4j 1.2 已于 2015 年 8 月结束生命周期。用户应升级到 Log4j 2,因为它解决了以前版本中的许多其他问题。
CVE-2021-4104 MPS-2021-38359
2022-08-08 19:18
Fastjson 1.2.25-1.2.47版本远程代码执行漏洞
使用外部可控制的输入来选择类或代码(不安全的反射)
Fastjson 是Java语言实现的快速JSON解析和生成器,在1.2.25-1.2.47版本中攻击者可通过精心构造的JSON请求,绕过此前修复机制,远程执行任意代码。 漏洞原因: 攻击者可通过白名单类java.lang.Class绕过checkAutotype方法,利用fastjson的cache机制引入恶意类,并调用连接远程rmi主机,通过其中的恶意类执行代码。
MPS-2018-27011
2022-08-08 19:18
Fastjson <= 1.2.60 版本远程代码执行漏洞
使用外部可控制的输入来选择类或代码(不安全的反射)
Fastjson 是Java语言实现的快速JSON解析和生成器,在<=1.2.60的版本中攻击者可通过精心构造的JSON请求,在autoType显式开启的情况下,绕过黑名单机制,远程执行任意代码。 漏洞原因: 攻击者发现了两个类JNDIConfiguration和OracleManagedConnectionFactory不在黑名单中,可调用连接远程rmi主机,通过其中的恶意类执行代码。
MPS-2019-28847
2022-08-08 19:18
Apache Tomcat 安全漏洞
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat存在安全漏洞,漏洞版本中对于Tomcat实例仍然容易受到CVE-2020-9494的攻击。
CVE-2021-25329 MPS-2021-2466
2022-08-08 19:18
Apache Tomcat 代码问题漏洞
反序列化
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。 在漏洞版本中由于不适当的配置会导致攻击者通过使用特制的请求,够通过反序列化他们控制的文件来触发远程代码执行。
CVE-2020-9484 MPS-2020-7626
2022-08-08 19:18
Apache Tomcat 信息泄露漏洞
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 Apache Tomcat存在信息泄露漏洞,该漏洞源于可以在响应新的 h2c 连接请求时复制请求头和数量有限的请求体,这意味着用户a和用户B都可以看到用户a的请求结果。
CVE-2021-25122 MPS-2021-2309
2022-08-08 19:18
Apache Tomcat 安全漏洞
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 Apache Tomcat存在安全漏洞,该漏洞源于如果一个HTTP/2客户端连接到超过约定的最大数量,在该连接上发出的后续请求可以包含之前请求的HTTP头信息,包括HTTP / 2伪头。这可能导致用户看到对意外资源的响应。
CVE-2020-13943 MPS-2020-15344
2022-08-08 19:18
Fastjson <=1.2.68 远程代码执行漏洞
使用外部可控制的输入来选择类或代码(不安全的反射)
Fastjson 是Java语言实现的快速JSON解析和生成器,在<=1.2.68的版本中攻击者可通过精心构造的JSON请求,远程执行恶意代码。 漏洞原因: Fastjson采用黑白名单的方法来防御反序列化漏洞,导致当黑客不断发掘新的反序列化Gadgets类时,发现在AutoTypeSupport关闭的情况下仍然可能可以绕过黑白名单防御机制,造成远程命令执行漏洞。 本次绕过通过继承自 Throwable 异常类的白名单类gadget实现,漏洞点为ThrowableDeserializer#deserialze。
MPS-2020-39708
2022-08-08 19:18
Apache Ant 信息泄露漏洞
将资源暴露给错误范围
Apache Ant是美国阿帕奇(Apache)基金会的一套用于Java软件开发的自动化工具。该工具主要用于软件的编译、测试和部署等。 Apache Ant 1.1版本至1.9.14版本和1.10.0版本至1.10.7版本中存在信息泄露漏洞。攻击者可利用该漏洞泄漏敏感信息。
CVE-2020-1945 MPS-2020-7418
2022-08-08 19:18
Apache Tomcat 信息泄露漏洞
信息暴露
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。 Apache Tomcat的漏洞版本中,使用 NTFS 文件系统从网络位置提供资源时,某些配置中容易受到 JSP 源代码泄露的影响,从而导致信息泄露
CVE-2021-24122 MPS-2021-1722
2022-08-08 19:18
Apache Log4j 代码问题漏洞
反序列化
CVE-2020-9493 发现了 Apache Chainsaw 中存在的反序列化问题。在 Chainsaw V2.0 之前,Chainsaw 是 Apache Log4j 1.2.x 的一个组件,存在同样的问题。
CVE-2022-23307 MPS-2022-1445
2022-08-08 19:18
Apache Log4j 代码问题漏洞
反序列化
当攻击者对 Log4j 配置具有写访问权限或配置引用攻击者有权访问的 LDAP 服务时,所有 Log4j 1.x 版本中的 JMSSink 都容易受到不受信任数据的反序列化。攻击者可以提供一个 TopicConnectionFactoryBindingName 配置,使 JMSSink 执行 JNDI 请求,从而以类似于 CVE-2021-4104 的方式执行远程代码。请注意,此问题仅在专门配置为使用 JMSSink(不是默认设置)时影响 Log4j 1.x。 Apache Log4j 1.2 已于 2015 年 8 月结束生命周期。用户应升级到 Log4j 2,因为它解决了以前版本中的许多其他问题。
CVE-2022-23302 MPS-2022-1446
2022-08-08 19:18
Apache Log4j 代码问题漏洞
反序列化
Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开源日志记录工具。Log4j 1.2版本中包含一个SocketServer类,在未经验证的情况下,该SocketServe类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,可以利用该类远程执行任意代码。
CVE-2019-17571 MPS-2019-17271
2022-08-08 19:18
Apache Tomcat 操作系统命令注入漏洞
命令注入
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat 9.0.0.M1版本至9.0.17版本、8.5.0版本至8.5.39版本和7.0.0版本至7.0.93版本中的CGI Servlet存在操作系统命令注入漏洞。远程攻击者可利用该漏洞执行代码。
CVE-2019-0232 MPS-2019-4006
2022-08-08 19:18
Apache Log4j 信任管理问题漏洞
证书验证不恰当
Apache Log4j是美国阿帕奇(Apache)基金会的一款基于Java的开源日志记录工具。 Apache Log4j中存在信任管理问题漏洞,该漏洞源于SmtpAppender没有验证主机名称与SMTPS连接的SSL/TLS证书是否匹配。攻击者可通过实施中间人攻击利用该漏洞拦截SMTPS连接,获取日志消息。
CVE-2020-9488 MPS-2020-6684
2022-08-08 19:18
Apache Tomcat 安全漏洞
输入验证不恰当
Apache Tomcat是美国阿帕奇(Apache)基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat 存在安全漏洞,该漏洞源于程序处理某些 TLS 数据包时存在无限循环,远程攻击者可以向应用程序发送特制的数据包,消耗所有可用的系统资源并导致拒绝服务条件。
CVE-2021-41079 MPS-2021-31848
2022-08-08 19:18
fastjson < 1.2.83 任意代码执行漏洞
反序列化
Fastjson 是Java语言实现的快速JSON解析和生成器。 fastjson 使用黑白名单用于防御反序列化漏洞,1.2.80及以下版本在特定条件下可绕过默认autoType关闭限制,攻击远程服务器。 攻击者可利用该漏洞远程执行恶意代码。
CVE-2022-25845 MPS-2022-11320
2022-08-08 19:18
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
4 评论
7 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部