下面列出了org.springframework.web.context.request.RequestContextHolder#currentRequestAttributes ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public Runnable decorate(Runnable runnable) {
RequestAttributes context;
try {
context = RequestContextHolder.currentRequestAttributes();
} catch (Exception e) {
return runnable;
}
RequestAttributes finalContext = context;
return () -> {
try {
RequestContextHolder.setRequestAttributes(finalContext);
runnable.run();
} finally {
RequestContextHolder.resetRequestAttributes();
}
};
}
@Override
protected String resolveCodeWithoutArguments(String code, Locale locale) {
// 获取request中设置的指定国际化文件名
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
final String i18File = (String) attr.getAttribute(I18N_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
if (!StringUtils.isEmpty(i18File)) {
//获取在basenameSet中匹配的国际化文件名
String basename = getBasenameSet().stream()
.filter(name -> StringUtils.endsWithIgnoreCase(name, i18File))
.findFirst().orElse(null);
if (!StringUtils.isEmpty(basename)) {
//得到指定的国际化文件资源
ResourceBundle bundle = getResourceBundle(basename, locale);
if (bundle != null) {
return getStringOrNull(bundle, code);
}
}
}
//如果指定i18文件夹中没有该国际化字段,返回null会在ParentMessageSource中查找
return null;
}
@Before("@annotation(tokenRequired)")
public void tokenRequiredWithAnnotation(TokenRequired tokenRequired) throws Throwable{
ServletRequestAttributes reqAttributes = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = reqAttributes.getRequest();
// checks for token in request header
String tokenInHeader = request.getHeader("token");
if(StringUtils.isEmpty(tokenInHeader)){
throw new IllegalArgumentException("Empty token");
}
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary(SecurityServiceImpl.secretKey))
.parseClaimsJws(tokenInHeader).getBody();
if(claims == null || claims.getSubject() == null){
throw new IllegalArgumentException("Token Error : Claim is null");
}
if(!claims.getSubject().equalsIgnoreCase("packt")){
throw new IllegalArgumentException("Subject doesn't match in the token");
}
}
@Override
public Runnable decorate(Runnable runnable) {
RequestAttributes context = RequestContextHolder.currentRequestAttributes();
return () -> {
try {
RequestContextHolder.setRequestAttributes(context);
runnable.run();
} finally {
RequestContextHolder.resetRequestAttributes();
}
};
}
/**
* Return the current RequestAttributes instance as ServletRequestAttributes.
* @see RequestContextHolder#currentRequestAttributes()
*/
private static ServletRequestAttributes currentRequestAttributes() {
RequestAttributes requestAttr = RequestContextHolder.currentRequestAttributes();
if (!(requestAttr instanceof ServletRequestAttributes)) {
throw new IllegalStateException("Current request is not a servlet request");
}
return (ServletRequestAttributes) requestAttr;
}
/**
*
* 获取当前request
*
* @return ServletRequestAttributes
* @author tangyi
* @date 2019-11-12 00:15
*/
private static ServletRequestAttributes currentRequestAttributes() {
try {
RequestAttributes requestAttr = RequestContextHolder.currentRequestAttributes();
if (!(requestAttr instanceof ServletRequestAttributes)) {
throw new IllegalStateException("current request is not a servlet request");
}
return (ServletRequestAttributes) requestAttr;
} catch (Exception e) {
// do nothing
}
return null;
}
@Before("@annotation(tokenRequired)")
public void tokenRequiredWithAnnotation(TokenRequired tokenRequired) throws Throwable{
System.out.println("Before tokenRequiredWithAnnotation");
ServletRequestAttributes reqAttributes = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = reqAttributes.getRequest();
// checks for token in request header
String tokenInHeader = request.getHeader("token");
if(StringUtils.isEmpty(tokenInHeader)){
throw new IllegalArgumentException("Empty token");
}
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary(SecurityServiceImpl.secretKey))
.parseClaimsJws(tokenInHeader).getBody();
if(claims == null || claims.getSubject() == null){
throw new IllegalArgumentException("Token Error : Claim is null");
}
if(!claims.getSubject().equalsIgnoreCase("packt")){
throw new IllegalArgumentException("Subject doesn't match in the token");
}
}
private boolean sholdFromRequest() {
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
if (requestAttributes == null) {
return false;
}
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
if (request == null) {
return false;
}
return ArrayUtils.contains(recordMethods, request.getMethod());
}
@Before("@annotation(csrTokenRequired)")
public void adminTokenRequiredWithAnnotation(CSRTokenRequired csrTokenRequired) throws Throwable{
ServletRequestAttributes reqAttributes = (ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = reqAttributes.getRequest();
// checks for token in request header
String tokenInHeader = request.getHeader("token");
if(StringUtils.isEmpty(tokenInHeader)){
throw new IllegalArgumentException("Empty token");
}
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary(SecurityServiceImpl.secretKey))
.parseClaimsJws(tokenInHeader).getBody();
if(claims == null || claims.getSubject() == null){
throw new IllegalArgumentException("Token Error : Claim is null");
}
String subject = claims.getSubject();
if(subject.split("=").length != 2 || new Integer(subject.split("=")[1]) != 2){
throw new IllegalArgumentException("User is not authorized");
}
}
@Override
public void storeAccessToken(OAuth2AccessToken token, OAuth2Authentication authentication) {
HashMap<String, Object> additionalInfo = new HashMap<>();
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
String sessionId = "";
sessionId = attr.getRequest().getSession(true).getId();
additionalInfo.put("createTime", new Date());
additionalInfo.put("sessionId", sessionId);
((DefaultOAuth2AccessToken) token).setAdditionalInformation(additionalInfo);
super.storeAccessToken(token, authentication);
}
@AfterReturning(value = "pointcut()", returning = "result")
public void doAfter(JoinPoint joinPoint, Object result) {
RequestMapping requestMapping = getRequestMapping(joinPoint);
if (!isSholdRecord(requestMapping)) {
return;
}
OperateRecord operateRecord = new OperateRecord();
operateRecord.setOperateTime(new Date());
Signature signature = joinPoint.getSignature();
operateRecord.setHandler(signature.getDeclaringType().getSimpleName() + "#" + signature.getName());
operateRecord.setOperator(userModule.getCurrentUserId());
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
// if (requestAttributes != null) {
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// if (request != null) {
operateRecord.setUri(request.getRequestURI());
operateRecord.setHttpMethod(request.getMethod());
operateRecord.setIp(WebUtils.getIpAddr(request));
operateRecord.setQueryString(request.getQueryString());
// }
// }
try {
String HeadlerArgs = desensitizationArgs(request, joinPoint.getArgs());
operateRecord.setHeadlerArgs(objectMapper.writeValueAsString(HeadlerArgs));
} catch (Exception e) {
log.warn(e.getMessage(), e);
}
if (result instanceof ApiRes) {
ApiRes apiRes = (ApiRes) result;
operateRecord.setApiResCode(apiRes.getCode());
if (StringUtils.equals(apiRes.getCode(), ApiRes.CODE_SUCCESS)) {
operateRecord.setOperateState(OperateRecord.OPERATE_STATE_SCUUESSED);
}
}
operateAuditModule.recordOperate(operateRecord);
}
/**
* Get the base URL to use for API requests from the current servlet request.
*/
public static String getBaseUrl() {
var requestAttrs = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return getBaseUrl(requestAttrs.getRequest());
}
public static HttpServletRequest currentRequest() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest();
}
@Override
public <T> Future<T> submit(Callable<T> task) {
return super.submit(new ContextAwareCallable<T>(task, RequestContextHolder.currentRequestAttributes()));
}
@Override
public <T> ListenableFuture<T> submitListenable(Callable<T> task) {
return super.submitListenable(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes()));
}
@Override
public <T> Future<T> submit(Callable<T> task) {
return super.submit(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes()));
}
public static HttpServletRequest getCurrentHttpServletRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attributes.getRequest();
}
/**
* 获取HttpServletRequest
* @return
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = attributes.getRequest();
return request;
}
public static HttpServletRequest getCurrentRequest() {
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return sra.getRequest();
}
/**
* 获取HttpServletRequest
* @return
*/
public static HttpServletRequest getRequest() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = attributes.getRequest();
return request;
}