示例:
當前url:http://localhost:8080/CarsiLogCenter_new/idpstat.jsp?action=idp.sptopn
request.getRequestURL() http://localhost:8080/CarsiLogCenter_new/idpstat.jsp
request.getRequestURI() /CarsiLogCenter_new/idpstat.jsp request.getContextPath()/CarsiLogCenter_new request.getServletPath() /idpstat.jsp request.getQueryString() action=idp.sptopn
public static String getLastAccessUrl(HttpServletRequest request) { StringBuffer requestURL = request.getRequestURI(); String queryString = request.getQueryString(); if (queryString == null) { return requestURL.toString(); } return requestURL + "?" + queryString; }
1、request.getRequestURL()
返回的是完整的url,包括Http協議,端口號,servlet名字和映射路徑,但它不包含請求參數。
2、request.getRequestURI()
得到的是request URL的部分值,並且web容器沒有decode過的
3、request.getContextPath()
返回 the context of the request.
4、request.getServletPath()
返回調用servlet的部分url.
5、request.getQueryString()
返回url路徑后面的查詢字符串
首先在你的Maven的pom文件里加入aop的依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
在spring boot里面一切配置都是很簡單的,下面為我所有被請求到的controller加上Aop的功能吧,看碼:
import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.google.gson.Gson; import org.slf4j.Logger; import org.slf4j.LoggerFactory;; @Aspect //定義一個切面 @Configuration public class LogRecordAspect { private static final Logger logger = LoggerFactory.getLogger(UserInterceptor.class); // 定義切點Pointcut @Pointcut("execution(* com.jiaobuchong.web.*Controller.*(..))") public void excudeService() { } @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; HttpServletRequest request = sra.getRequest(); String url = request.getRequestURL().toString(); String method = request.getMethod(); String uri = request.getRequestURI(); String queryString = request.getQueryString(); logger.info("請求開始, 各個參數, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString); // result的值就是被攔截方法的返回值 Object result = pjp.proceed(); Gson gson = new Gson(); logger.info("請求結束,controller的返回值是 " + gson.toJson(result)); return result; } }
只要加上上面這個類,Aop就算配置好了,不信,去訪問以下你的Controller試試。對比以前配置aop的方式(xml文件),現在的配置都到Java代碼里來了,@Configuration這個Annotation就是JavaConfig的典型代表,Spring boot在啟動時會會自動去加載這些配置,實現相應的配置功能。這個簡單的小例子算是拋磚引玉吧,我也是參考別人的博客,更多細節,查看下面的博客:
http://ysj5125094.iteye.com/blog/2151855
http://blog.csdn.net/jiaobuchong/article/details/50420379