Java 是否可以使用AOP进行web应用许可证验证?

Java 是否可以使用AOP进行web应用许可证验证?,java,spring,spring-mvc,aop,Java,Spring,Spring Mvc,Aop,目前,我有一个Spring MVCweb应用程序,它使用ServletFilter过滤每个HTTP请求,并通过检查和验证许可证文件内容来检查用户是否真正购买了许可证 我已经在SpringXML文件和web.xml中适当地映射了过滤器。由于我可以访问过滤器中的HttpServletRequest和HttpServletResponse,因此,如果验证失败,我可以将用户重定向到错误页面 那么,现在正如标题所示,是否可以使用SpringAOP做同样的事情?如何配置Spring AOP以访问容器创建的请

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

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


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

您可以使用AOP Advises完成此操作

建议:建议是针对特定连接点采取的操作。在里面 就编程而言,它们是在 在中达到具有匹配切入点的特定连接点 应用你可以把建议看作Struts2拦截器 Servlet过滤器

因此,您可以配置一个通知来进行验证。您还可以将它们配置为在需要执行的特定点(即)执行

但请记住,AOP的作用域只用于方法调用,它并不像servlet过滤器那个样提供响应


一开始就是一个简单的例子。

你可以通过AOP建议来完成

建议:建议是针对特定连接点采取的操作。在里面 就编程而言,它们是在 在中达到具有匹配切入点的特定连接点 应用你可以把建议看作Struts2拦截器 Servlet过滤器

因此,您可以配置一个通知来进行验证。您还可以将它们配置为在需要执行的特定点(即)执行

但请记住,AOP的作用域只用于方法调用,它并不像servlet过滤器那个样提供响应

首先是一个简单的例子

如何配置SpringAOP来访问请求和请求 容器创建的用于重定向用户的响应对象

您将无法获得与servlet过滤器相同的确切行为。
Filter
通过传入
ServletRequest
ServletResponse
对象,围绕目标
Servlet
运行。从这个意义上讲,您可以得到类似的行为,因为AOP建议可以围绕连接点进行操作,并截获传递的参数

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

一旦通知访问了对象,它就可以简单地调用
HttpServletResponse#sendRedirect(..)
forward()
或其他什么

如何配置SpringAOP来访问请求和请求 容器创建的用于重定向用户的响应对象

您将无法获得与servlet过滤器相同的确切行为。
Filter
通过传入
ServletRequest
ServletResponse
对象,围绕目标
Servlet
运行。从这个意义上讲,您可以得到类似的行为,因为AOP建议可以围绕连接点进行操作,并截获传递的参数

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


一旦通知访问了对象,它就可以简单地调用
HttpServletResponse#sendRedirect(..)
forward()
或其他什么

实现这一点的最佳方法是使用异常。这样,检查和处理在不同的情况下可能会有所不同,例如web应用程序和普通应用程序

您的支票可以使用aop添加到特定的连接点。如果发现有问题,它将抛出InvalidLicenseException(extends RuntimeException)。现在有几种方法可以在抛出异常时将请求重定向到错误页面。您可以将其添加到web.xml中:

InvalidLicenseException/license-error.jsp


因为您使用的是spring,所以还可以使用注释。阅读

实现这一点的最佳方法是使用异常。这样,检查和处理在不同的情况下可能会有所不同,例如web应用程序和普通应用程序

您的支票可以使用aop添加到特定的连接点。如果发现有问题,它将抛出InvalidLicenseException(extends RuntimeException)。现在有几种方法可以在抛出异常时将请求重定向到错误页面。您可以将其添加到web.xml中:

InvalidLicenseException/license-error.jsp


因为您使用的是spring,所以还可以使用注释。阅读

您是否希望许可证文件在请求之间更改?许可证检查是一个应用程序在启动时通常只做一次,而不是每次请求都做一次又一次的检查。@Wyzard否。实际上我正在定期检查许可证文件。非福