CodeQL系列之Spring
SpringController和SpringRestController
一种就是传统的web的那种controller,而另外一种就是REST类型的controller。
@Controller
通常是被使用服务于web 页面的。默认,你的controller方法返回的是一个string 串,是表示要展示哪个模板页面或者是要跳转到哪里去。
@RestController
就是专门用在编写API的时候,特别那种返回一个JSON,或者是XML等等。然后方法返回的是可以是一个对象,是一个可以被序列化的对象。
SpringController返回的是注解为@Controller
SpringRestController返回的是注解为@RestController
例子
import java
import semmle.code.java.frameworks.spring.SpringController
from SpringController var1
select var1, var1.getFile(), var1.getLocation()
import java
import semmle.code.java.frameworks.spring.SpringController
from SpringRestController var1
select var1, var1.getFile(), var1.getLocation()
SpringControllerMethod
返回方法
import java
import semmle.code.java.frameworks.spring.SpringController
from SpringControllerMethod method
select method, method.getFile(), method.getLocation()
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()
Annotation.getAnAnnotation
获取注解
import semmle.code.java.frameworks.spring.SpringController
from SpringRequestMappingAnnotationType var2
select var2.getAnAnnotation(), var2.getFile(), var2.getLocation()
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()
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")
SpringRequestMappingMethod
获取路由方法
import java
import semmle.code.java.frameworks.spring.SpringController
from SpringRequestMappingMethod var1
select var1, var1.getFile(), var1.getLocation()
SpringRequestMappingParameter
获取路由参数
import java
import semmle.code.java.frameworks.spring.SpringController
from SpringRequestMappingParameter var1
select var1, var1.getFile(), var1.getLocation()