浏览 4947 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-03-19
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-03-20
controller不支持AOP,spring提供了替代的接口,如果非要自己去对controller做AOP,可以做,不过不推荐。
|
|
返回顶楼 | |
发表时间:2013-03-20
最后修改:2013-03-21
楼上的帅哥,SPRING提供了替代的接口是那一个呢,能否详细说明下 谢谢
|
|
返回顶楼 | |
发表时间:2013-03-22
是个intercept结尾的类,你找找看呢,具体名字我忘记了,不知道是不是叫handerMappingIntercept了
|
|
返回顶楼 | |
发表时间:2013-03-22
帮你找了下,是这个HandlerInterceptorAdapter
|
|
返回顶楼 | |
发表时间:2013-04-01
帅哥,你有用这个类做过,CONTROLLER的AOP么?
|
|
返回顶楼 | |
发表时间:2013-04-03
帅哥,已用HandlerInterceptorAdapter抽象类实现 CONTROLLER的拦截,现在的问题是我想拦截的时候获取具体访问的方法名称,你有没有处理过?
|
|
返回顶楼 | |
发表时间:2013-07-30
ka520 写道 帅哥,已用HandlerInterceptorAdapter抽象类实现 CONTROLLER的拦截,现在的问题是我想拦截的时候获取具体访问的方法名称,你有没有处理过?
package com.eman.core.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.eman.core.controller.BaseController; import com.eman.core.util.BaseUtils; import com.eman.core.util.WebUtils; /** * 通用拦截器 * * @ClassName: UserRightsInterceptor * @Description:拦截所有请求,判断注册、权限、session失效等信息 * @author liud * @date 2012-12-10 * */ public class GenericInterceptor implements HandlerInterceptor { protected static final Logger log = LoggerFactory.getLogger("spring"); private String reptime; // 限制响应时间 private String perereg; // 权限正则表达式 private String checked; // 是否检查权限 private long beforetime; public void setReptime(String reptime) { this.reptime = reptime; } public void setPerereg(String perereg) { this.perereg = perereg; } public void setChecked(String checked) { this.checked = checked; } /** * 拦截执行后的方法 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception { } /** * 拦截执行中的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception { String servletPath = request.getServletPath(); int[] customParams = BaseUtils.requests(servletPath); customParams[2] = "true".equals(this.checked) ? 1 : 0; // 1则开启权限检查 HandlerMethod handler = (HandlerMethod) object; BaseController controller = null; if (handler != null) { controller = (BaseController) handler.getBean(); controller.afterControllerMessage(request, response, customParams); } long aftertime = System.currentTimeMillis(); // 执行后的时间 int configtime = BaseUtils.parseInt(this.reptime); // 配置的时间点(秒) if (configtime != 0) { int seconds = (int) (aftertime - this.beforetime) / 1000; if (configtime < seconds) log.warn("警告:[{}]请求响应的时间({}秒)", servletPath, seconds); } } /** * 在拦截前的方法 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { this.beforetime = System.currentTimeMillis(); // 记录请求时间 int[] customParams = BaseUtils.requests(request.getServletPath()); customParams[2] = "true".equals(this.checked) ? 1 : 0; // 1则开启权限检查 String res = object != null ? object.toString() : null; // 获得请求的类与方法字符串 if (res != null) { int indexOf = res.indexOf("com."); log.debug("事件[{}],响应[{}]", customParams[0], indexOf != -1 ? res.substring(indexOf) : res); } String checktypes = null; // 以下状态可以在[GenericController]找到说明 if (!(object instanceof HandlerMethod)) checktypes = "4"; else if (!(((HandlerMethod) object).getBean() instanceof BaseController)) checktypes = "b"; else if (!WebUtils.accessRight(request, this.perereg)) checktypes = "a"; else checktypes = ((BaseController) ((HandlerMethod) object).getBean()) .preControllerMessage(request, response, customParams); if (!BaseUtils.isEmpty(checktypes)) { request.setAttribute("interceptortype", checktypes); // 拦截的类型 request.getRequestDispatcher("/gcontroller/100000").forward( request, response); return false; } return true; } } |
|
返回顶楼 | |
发表时间:2013-08-13
既然用spring了,用@Aspectj注解的方式就可以完成aop了
|
|
返回顶楼 | |
发表时间:2013-08-15
foible 写道 ka520 写道 帅哥,已用HandlerInterceptorAdapter抽象类实现 CONTROLLER的拦截,现在的问题是我想拦截的时候获取具体访问的方法名称,你有没有处理过?
package com.eman.core.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.eman.core.controller.BaseController; import com.eman.core.util.BaseUtils; import com.eman.core.util.WebUtils; /** * 通用拦截器 * * @ClassName: UserRightsInterceptor * @Description:拦截所有请求,判断注册、权限、session失效等信息 * @author liud * @date 2012-12-10 * */ public class GenericInterceptor implements HandlerInterceptor { protected static final Logger log = LoggerFactory.getLogger("spring"); private String reptime; // 限制响应时间 private String perereg; // 权限正则表达式 private String checked; // 是否检查权限 private long beforetime; public void setReptime(String reptime) { this.reptime = reptime; } public void setPerereg(String perereg) { this.perereg = perereg; } public void setChecked(String checked) { this.checked = checked; } /** * 拦截执行后的方法 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception { } /** * 拦截执行中的方法 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception { String servletPath = request.getServletPath(); int[] customParams = BaseUtils.requests(servletPath); customParams[2] = "true".equals(this.checked) ? 1 : 0; // 1则开启权限检查 HandlerMethod handler = (HandlerMethod) object; BaseController controller = null; if (handler != null) { controller = (BaseController) handler.getBean(); controller.afterControllerMessage(request, response, customParams); } long aftertime = System.currentTimeMillis(); // 执行后的时间 int configtime = BaseUtils.parseInt(this.reptime); // 配置的时间点(秒) if (configtime != 0) { int seconds = (int) (aftertime - this.beforetime) / 1000; if (configtime < seconds) log.warn("警告:[{}]请求响应的时间({}秒)", servletPath, seconds); } } /** * 在拦截前的方法 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { this.beforetime = System.currentTimeMillis(); // 记录请求时间 int[] customParams = BaseUtils.requests(request.getServletPath()); customParams[2] = "true".equals(this.checked) ? 1 : 0; // 1则开启权限检查 String res = object != null ? object.toString() : null; // 获得请求的类与方法字符串 if (res != null) { int indexOf = res.indexOf("com."); log.debug("事件[{}],响应[{}]", customParams[0], indexOf != -1 ? res.substring(indexOf) : res); } String checktypes = null; // 以下状态可以在[GenericController]找到说明 if (!(object instanceof HandlerMethod)) checktypes = "4"; else if (!(((HandlerMethod) object).getBean() instanceof BaseController)) checktypes = "b"; else if (!WebUtils.accessRight(request, this.perereg)) checktypes = "a"; else checktypes = ((BaseController) ((HandlerMethod) object).getBean()) .preControllerMessage(request, response, customParams); if (!BaseUtils.isEmpty(checktypes)) { request.setAttribute("interceptortype", checktypes); // 拦截的类型 request.getRequestDispatcher("/gcontroller/100000").forward( request, response); return false; } return true; } } String res = object != null ? object.toString() : null; // 获得请求的类与方法字符串 if (res != null) { int indexOf = res.indexOf("com."); log.debug("事件[{}],响应[{}]", customParams[0], indexOf != -1 ? res.substring(indexOf) : res); } 我已经用日志输出了你想的。 |
|
返回顶楼 | |