gpt4 book ai didi

java - 如何将@ExceptionHandler与Spring拦截器一起用于两个JSP页面?

转载 作者:行者123 更新时间:2023-12-02 05:05:10 25 4
gpt4 key购买 nike

我正在研究 Spring MVC Controller 项目。我正在尝试在两个 jsp 页面上添加安全性。这意味着我将拦截来自请求的 IP 地址并查看该 IP 地址是否是有效的 IP 地址。如果不是有效的 IP 地址,则显示错误 jsp 页面。

当我在两个 JSP 页面上添加此安全性时。所以我想为上述两个 jsp 调用显示不同的错误消息,以获取无效的 IP 地址调用。

一旦我在浏览器上点击以下网址,如果它是有效的 IP 地址调用,它将显示我的 testOperationtestProcess JSP 页面 -

http://localhost:8080/testweb/testOperation
http://localhost:8080/testweb/testProcess

所以我为此实现了拦截器,然后也在 XML 中配置了 Spring MVC 拦截器。现在我正在使用以下代码检查有效的 IP 地址情况。

@Component
public class IpCheckingInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

String requestURI = request.getRequestURI();
System.out.println(requestURI);

String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
if (!isValid(ipAddress) && requestURI.equalsIgnoreCase("/testweb/testOperation")) {
// need to show a proper error message on the jsp

return false;
} else if (!isValid(ipAddress) && requestURI.equalsIgnoreCase("/testweb/testProcess")) {
// need to show a below JSON response as an error on the browser
// {"response":"You are not authorized to make a call.","error":"AUTHORIZATION_ERROR","status":"ERROR"}

return false;
}

return true;
}
}

在我的 context.xml 文件中 -

<mvc:interceptors>
<bean class="com.testing.interceptor.IpCheckingInterceptor" />
</mvc:interceptors>

这是否可以做到?现在,正如我上面提到的,我需要根据调用的页面来显示无效 ip 地址调用的不同错误 jsp 消息。最好的方法是什么?

如果可能的话,我根本不想重定向到其他 JSP 页面。我想在同一页面上,然后如果可能的话适本地显示错误消息?

最佳答案

我想,如果要这样做,我可能会使用 Spring Security,所以我会尝试使用它。如果您不想为这个小小的用例引入 Spring Security,我也能理解。

通过HandlerInterceptor,您可以使用request.getRequestDispatcher(path)来处理响应。如果我是你,我会调度到 Spring MVC 端点,以便 DispatcherServlet 为我处理内容协商和 View 解析(因此调度程序中的路径将映射到@Controller@RestController)。我可能也想使用 AOP 拦截器而不是 HanderInterceptor,但可能有一些不这样做的原因,只有在我尝试过之后才会清楚。

顺便说一句,如果您正确设置服务器(例如,在Tomcat 有一个 RemoteIpValve 可以做到这一点)。或者,如果您不控制容器,则可以将该逻辑提取到Filter 中。

关于java - 如何将@ExceptionHandler与Spring拦截器一起用于两个JSP页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com