最近在配置一个框架话不多说 贴代码
java 代码
public class AuthInterceptor extends HandlerInterceptorAdapter{
protected final Logger logger = Logger.getLogger(AuthInterceptor.class);
public static final String SESSION_SYSTEMSSO_KEY = "SYSTEM_SSO";
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("AuthInterceptor Interceptor : preHandle => Begin");
}
if(isStreamIdExist(request)){
logger.debug("==========================验证不通过=====================");
throw new CsidAuthException("request stream ID is invalid");
}
if(!authValidation(request)){
logger.debug("===========================验证不通过,验证信息错误!=====================");
throw new CsidAuthException("login validation error");
}
if (logger.isDebugEnabled()) {
logger.debug("===========================验证通过!=======================");
logger.debug("AuthInterceptor Interceptor : preHandle => End");
}
return true;
}
xml 配置
配置上感觉是没有问题 在每次flow 访问都会进去 transactionInterceptor authInterceptor 这两个拦截器 但是每次请求一次便会对这两个拦截器执行两次 理论上应该是一次的
处理逻辑就是 从request获取一个 Stream id 来检查内存是否存在 不存在并且不为空 则验证通过 反之则不通过 下面是 flow一次请求 控制台输出的信息 第一次验证通过了 但是马上进入第二次authInterceptor进行验证 Stream id 为空 则会被拦截 很奇怪 拦截器怎么会被 执行两次? 请大虾们帮小弟解决下这个问题 或者 给点思路
13:48:45,734 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:84) - Transaction Interceptor : preHandle => Begin
13:48:45,734 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:107) - Transaction Interceptor : prepareRequest => Begin
13:48:45,734 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:126) - Transaction is opened before by other controller's interceptor (txnId=1). Skip Transaction open. txnId=1
13:48:45,734 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:133) - Transaction Interceptor : prepareRequest => End
13:48:45,734 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:90) - Transaction Interceptor : preHandle => End
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:37) - AuthInterceptor Interceptor : preHandle => Begin
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:134) - Stream ID is 1282715325155
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (CacheHelperImpl.java:32) - [service.oneDay]::retrieveCacheElement => key:[1282715325155]
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (CacheHelperImpl.java:145) - cache can not retrieve for cache key='1282715325155'
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (CacheHelperImpl.java:91) - [service.oneDay]::setCacheElement => key:[1282715325155]
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:51) - ===========================验证通过!=======================
13:48:45,750 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:52) - AuthInterceptor Interceptor : preHandle => End
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:40) - Transaction Interceptor : afterCompletion => Begin
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:50) - Try to close transaction. txnId=1
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:56) - Start to close transaction for the request:/CSID_WEB/webflow/csid/custInfo
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:86) - ----------------------------------------------------
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:87) - ------------ Transaction will be roll back ---------
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:88) - ----------------------------------------------------
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:116) - Try to rollback trasaction.
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:133) - TransactionSvcImpl: Check the coding whether the transaction is already commited already.
13:48:45,828 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:72) - Transaction Interceptor : afterCompletion => End
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:84) - Transaction Interceptor : preHandle => Begin
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:107) - Transaction Interceptor : prepareRequest => Begin
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:126) - Transaction is opened before by other controller's interceptor (txnId=1). Skip Transaction open. txnId=1
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:133) - Transaction Interceptor : prepareRequest => End
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:90) - Transaction Interceptor : preHandle => End
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:37) - AuthInterceptor Interceptor : preHandle => Begin
13:48:45,843 INFO [STDOUT] INFO [http-127.0.0.1-8080-1] (AuthInterceptor.java:140) - Stream ID is empty in the request
13:48:45,843 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (AuthInterceptor.java:41) - ===========================验证不通过=====================
13:48:45,859 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (CsidExceptionResolver.java:50) - setRollbackOnly in TransactionStatus
13:48:45,859 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (SimpleMappingExceptionResolver.java:251) - Resolving exception from handler [[FlowHandlerMapping.DefaultFlowHandler@4cc243]]: cn.tisson.csid.common.web.exception.CsidAuthException: request stream ID is invalid
13:48:45,859 INFO [STDOUT] WARN [http-127.0.0.1-8080-1] (SimpleMappingExceptionResolver.java:285) - Handler execution resulted in exception
cn.tisson.csid.common.web.exception.CsidAuthException: request stream ID is invalid
at cn.tisson.csid.common.web.interceptor.AuthInterceptor.preHandle(AuthInterceptor.java:42)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:865)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:619)
13:48:45,859 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (SimpleMappingExceptionResolver.java:347) - Resolving to view 'defaultErrorView' for exception of type [cn.tisson.csid.common.web.exception.CsidAuthException], based on exception mapping [cn.tisson.csid.common.web.exception.CsidAuthException]
13:48:45,859 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (SimpleMappingExceptionResolver.java:439) - Exposing Exception as model attribute 'exception'
13:48:46,203 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:40) - Transaction Interceptor : afterCompletion => Begin
13:48:46,203 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:50) - Try to close transaction. txnId=1
13:48:46,203 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:56) - Start to close transaction for the request:/CSID_WEB/webflow/csid/custInfo
13:48:46,203 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:86) - ----------------------------------------------------
13:48:46,203 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:87) - ------------ Transaction will be roll back ---------
13:48:46,234 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:88) - ----------------------------------------------------
13:48:46,234 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:116) - Try to rollback trasaction.
13:48:46,234 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionSvcImpl.java:133) - TransactionSvcImpl: Check the coding whether the transaction is already commited already.
13:48:46,234 INFO [STDOUT] DEBUG [http-127.0.0.1-8080-1] (TransactionInterceptor.java:72) - Transaction Interceptor : afterCompletion => End