CodeQL系列之Spring

CodeQL系列之Spring

SpringController和SpringRestController

一种就是传统的web的那种controller,而另外一种就是REST类型的controller。

@Controller 通常是被使用服务于web 页面的。默认,你的controller方法返回的是一个string 串,是表示要展示哪个模板页面或者是要跳转到哪里去。

@RestController 就是专门用在编写API的时候,特别那种返回一个JSON,或者是XML等等。然后方法返回的是可以是一个对象,是一个可以被序列化的对象。

SpringController返回的是注解为@Controller

SpringRestController返回的是注解为@RestController

image-20220105112858778

例子

import java
import semmle.code.java.frameworks.spring.SpringController

from SpringController var1
select var1, var1.getFile(), var1.getLocation()

image-20220715174129859

import java
import semmle.code.java.frameworks.spring.SpringController

from SpringRestController var1
select var1, var1.getFile(), var1.getLocation()

image-20220715174042741

SpringControllerMethod

返回方法

import java
import semmle.code.java.frameworks.spring.SpringController

from SpringControllerMethod method
select method, method.getFile(), method.getLocation()

image-20220715174332349

SpringRequestMappingAnnotation

获取路由注解,可以匹配到@RequestMapping、@GetMapping、@PostMapping

import java
import semmle.code.java.frameworks.spring.SpringController

private class SpringRequestMappingAnnotation extends Annotation {
    SpringRequestMappingAnnotation() { this.getType() instanceof SpringRequestMappingAnnotationType }
}

from SpringRequestMappingAnnotation var1
select var1, var1.getFile(), var1.getLocation()

image-20220715174635918

image-20220715174615739

Annotation.getAnAnnotation

获取注解

import semmle.code.java.frameworks.spring.SpringController

from SpringRequestMappingAnnotationType var2
select var2.getAnAnnotation(), var2.getFile(), var2.getLocation()

image-20220715175027020

Annotation.getAnnotatedElement

获取注解下的方法

import java
import semmle.code.java.frameworks.spring.SpringController

private class SpringRequestMappingAnnotation extends Annotation {
    SpringRequestMappingAnnotation() { this.getType() instanceof SpringRequestMappingAnnotationType }
}

from SpringRequestMappingAnnotation var1
select var1, var1.getAnnotatedElement()

image-20220715175223397

Annotation.getValue

Annotation.getValue(“value”) 获取注解里key为value的值,如果注解里没有key,则默认key为value

import java
import semmle.code.java.frameworks.spring.SpringController

private class SpringRequestMappingAnnotation extends Annotation {
    SpringRequestMappingAnnotation() { this.getType() instanceof SpringRequestMappingAnnotationType }
}

from SpringRequestMappingAnnotation var1
select var1, var1.getValue("value")

image-20220715175340672

SpringRequestMappingMethod

获取路由方法

import java
import semmle.code.java.frameworks.spring.SpringController

from SpringRequestMappingMethod var1
select var1, var1.getFile(), var1.getLocation()

image-20220804113126155

SpringRequestMappingParameter

获取路由参数

import java
import semmle.code.java.frameworks.spring.SpringController

from SpringRequestMappingParameter var1
select var1, var1.getFile(), var1.getLocation()

image-20220804113251641


   转载规则


《CodeQL系列之Spring》 ske 采用 知识共享署名 4.0 国际许可协议 进行许可。