應(yīng)用市場中Java攔截器和切面的使用實例詳解
相信大家對攔截器和切面的概念已經(jīng)不陌生了,本文我們就看一些在應(yīng)用市場中,攔截器和切面的使用是怎樣的。
攔截器的使用:每次接收到某個請求之前,都會調(diào)用此攔截器中的方法,其中preHandle方法如果return true,表示繼續(xù)調(diào)用對應(yīng)的controller,如果return false,
public class CheckLoginInterceptor implements HandlerInterceptor {
private Logger logger = Logger.getLogger(CheckLoginInterceptor.class);
private static String TOKEN_VALID_MSG ;
static
{
TOKEN_VALID_MSG=JsonUtil.writeObject2JSON(new AMSResultVO(CodeNum.TOKEN_VALID, CodeMessage.TOKEN_VALID));
}
public Boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//request.getMethod獲取請求是get,post等
if ("OPTIONS".equals(request.getMethod()))
{
// 指定允許其他域名訪問
response.setHeader("Access-Control-Allow-Origin", "*");
// 響應(yīng)類型
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
// 響應(yīng)頭設(shè)置
response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header");
response.setStatus(204);
return true;
}
// 獲取從header中得到的數(shù)據(jù)
String userName = request.getHeader(CommonConsts.PARAM_USER_NAME);
String userToken = request.getHeader(CommonConsts.PARAM_USER_TOKEN);
Boolean result = true;
String method = request.getRequestURI();
if(method.equals("/ams/fileUpload"))
{
return true;
}
if(StringUtil.isEmpty(userName) || StringUtil.isEmpty(userToken))
{
result = false;
} else
{
result = TokenUtil.validToken(userName, userToken);
}
// token校驗失敗
if(!result)
{
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(TOKEN_VALID_MSG);
response.getWriter().flush();
response.getWriter().close();
}
return result;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
切面的使用:
//壞繞通知:需要攜帶ProceedingJoinPoint類型的參數(shù)
//環(huán)繞通知類似于動態(tài)代理的全過程:ProceedingJoinPoint類型的參數(shù)可以決定是否執(zhí)行目標(biāo)方法
//且環(huán)繞通知必須有返回值,返回值即目標(biāo)方法的返回值。
@Around("execution(* com.sowell.controller.*Controller.*(..))")
public Object aroundMethod(ProceedingJoinPoint pjd) {
Object result = null;
String methodName = pjd.getSignature().getName();
Object args = Arrays.asList(pjd.getArgs());
//執(zhí)行目標(biāo)方法
try {
logger.info("request channels begin, param{pageNum:" + methodName + ", pageSize:" + args);
//前置通知,表示在此之前的代碼會在調(diào)用controller之前調(diào)用
result = pjd.proceed();
recordOprationLog(result, methodName, result);
//后置通知
logger.info("Arround:The method "+ methodName+" ends");
}
catch (Throwable e) {
e.printStackTrace();
//異常通知
logger.error("Arround:The method "+ methodName+"occurs exception:"+e);
//throw new RuntimeException(e);
//不拋出異常的話,異常就被上面抓住,執(zhí)行下去,返回result,result值為null,轉(zhuǎn)換為int
}
//返回通知
logger.info("Arround:The method "+ methodName+" ends with the Result "+ result);
return result;
}
總結(jié)
以上就是本文關(guān)于應(yīng)用市場中Java攔截器和切面的使用實例詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Spring?Boot?整合?FreeMarker?實例分享
這篇文章主要分享了Spring?Boot整合FreeMarker?實例FreeMarker是一款模板引擎,即一種基于模板和要改變的數(shù)據(jù),并用來生成輸出文本,更多相關(guān)介紹需要的小伙伴可以參考下面文章內(nèi)容2022-05-05
java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個數(shù)
這篇文章主要為大家詳細(xì)介紹了java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個數(shù),感興趣的小伙伴們可以參考一下2016-02-02
java中String與StringBuilder的區(qū)別
本篇文章介紹了,java中String與StringBuilder的區(qū)別。需要的朋友參考下2013-04-04
spring security中的csrf防御原理(跨域請求偽造)
這篇文章主要介紹了spring security中的csrf防御機(jī)制原理解析(跨域請求偽造),本文通過實例代碼詳解的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12
詳解spring cloud config實現(xiàn)datasource的熱部署
這篇文章主要介紹了詳解spring cloud config實現(xiàn)datasource的熱部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
詳解SpringBoot中自定義starter的開發(fā)與使用
starter是SpringBoot中非常重要的一個機(jī)制,他是基于約定優(yōu)于配置的思想所衍生出來的,本文主要介紹了SpringBoot中自定義starter的開發(fā)與使用,感興趣的可以了解下2023-09-09
MyBatis Plus構(gòu)建一個簡單的項目的實現(xiàn)
這篇文章主要介紹了MyBatis Plus構(gòu)建一個簡單的項目的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

