是否可以使用AOP进行Web应用程序许可证验证?

时间:2014-08-07 04:57:14

标签: java spring spring-mvc aop

目前我有一个 Spring MVC Web应用程序,它使用 ServletFilter 来过滤每个HTTP请求,并通过检查和验证用户来检查用户是否真的购买了许可证。许可文件内容。

我已经在spring xml文件和web.xml中相应地映射了过滤器。由于我可以访问过滤器中的HttpServletRequestHttpServletResponse,因此如果验证失败,我可以将用户重定向到错误页面。

所以,现在正如标题所示,使用Spring AOP可以做同样的事情吗? Spring AOP如何配置为访问容器创建的请求和响应对象以重定向用户?

3 个答案:

答案 0 :(得分:3)

  

如何配置Spring AOP以访问请求和   容器创建的响应对象重定向用户?

您将无法获得与servlet过滤器相同的行为。 Filter通过在 ServletServletRequest对象中传递来对目标ServletResponse进行操作。从这个意义上说,你可以得到类似的行为,因为AOP建议可以在周围连接点并拦截传递的参数。

但是,AOP建议无法神奇地访问请求和响应。它要么建议接收它们的方法,要么从某个ThreadLocal或其他容器中获取它们。例如,Spring有RequestContextHolder可用于获取HttpServletRequest。但它没有任何东西可以给你HttpServletResponse(技术上不正确,但它不可靠)。你可以写一些类似的东西。

一旦建议可以访问对象,它就可以简单地调用HttpServletResponse#sendRedirect(..)forward()或其他任何东西。

答案 1 :(得分:1)

实现此目的的最佳方法是使用异常。这样,检查和处理在不同情况下可以是不同的,例如, Web应用程序与正常应用程序。

您的支票可以使用aop添加到特定的联接点。如果发现某些不妥之处,它将抛出InvalidLicenseException(扩展RuntimeException)。现在有几种方法可以在抛出异常时将请求重定向到错误页面。您可以将其添加到您的web.xml:

&LT;错误页&GT;&LT;异常型&GT; InvalidLicenseException&LT; /异常型&GT;&LT;地点&gt; /license-error.jsp< /地点&gt;&LT; /错误页&GT;

由于您使用的是spring,因此您也可以使用注释。阅读this

答案 2 :(得分:0)

你可以使用AOP Advises

来完成
  

建议:建议是针对特定连接点采取的操作。在   编程术语,它们是在a时执行的方法   在达到匹配切入点的某个连接点   应用。您可以将Advices视为Struts2拦截器或   Servlet过滤器。

因此,您可以配置建议以处理验证。您还可以将它们配置为在特定点(即)需要执行的位置执行。

但请记住,AOP的范围仅用于方法调用,并且它不会像servlet过滤器那样提供响应。

Learn More ..

简单示例here开头。