论坛首页 Java企业应用论坛

各位SPRING专家好,有人用过SPRING 的AOP么

浏览 4947 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-03-19  
各位同行好,请教下,SPRING 的AOP 怎么不能对CONTROLLER生效,求会的指点,谢谢。
   发表时间:2013-03-20  
controller不支持AOP,spring提供了替代的接口,如果非要自己去对controller做AOP,可以做,不过不推荐。
0 请登录后投票
   发表时间:2013-03-20   最后修改:2013-03-21
楼上的帅哥,SPRING提供了替代的接口是那一个呢,能否详细说明下  谢谢
0 请登录后投票
   发表时间:2013-03-22  
是个intercept结尾的类,你找找看呢,具体名字我忘记了,不知道是不是叫handerMappingIntercept了
0 请登录后投票
   发表时间:2013-03-22  
帮你找了下,是这个HandlerInterceptorAdapter
0 请登录后投票
   发表时间:2013-04-01  
帅哥,你有用这个类做过,CONTROLLER的AOP么?
0 请登录后投票
   发表时间:2013-04-03  
帅哥,已用HandlerInterceptorAdapter抽象类实现 CONTROLLER的拦截,现在的问题是我想拦截的时候获取具体访问的方法名称,你有没有处理过?
0 请登录后投票
   发表时间: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;
	}

}

0 请登录后投票
   发表时间:2013-08-13  
既然用spring了,用@Aspectj注解的方式就可以完成aop了
0 请登录后投票
   发表时间: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); 
        } 
我已经用日志输出了你想的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics