【问题标题】:HDIV issue while redirecting in Spring MVC Controller在 Spring MVC 控制器中重定向时出现 HDIV 问题
【发布时间】:2015-08-19 20:05:24
【问题描述】:

我继承了一些 Java Spring MVC 代码,这些代码在表单提交时在控制器中执行内部重定向

例如:

表单提交给

/login_submit       (POST request)

成功时,它会在控制器内部重定向:-

.....
return "redirect:"+"/user/home"

但是,由于它在代码内部并且没有使用 <c:redirect><c:url> 标签,因此 HDIV 无法通过

提交此表单

INVALID_ACTION 错误

请帮助理解和解决这个问题,最好不要过多更改遗留代码

非常感谢您的及时回复!!!

【问题讨论】:

  • 请添加错误日志和代码示例
  • 您使用的是什么版本的 HDIV 和 Spring MVC?它应该可以工作,因为 HDIV 拦截了“重定向:”。您似乎对请求的操作有问题。请给我们更多信息。

标签: java spring spring-mvc spring-security hdiv


【解决方案1】:

有两种方法可以实现,

1) 跳过验证:

@Configuration
@EnableHdivWebSecurity
public class HdivSecurityConfig extends HdivWebSecurityConfigurerAdapter {
    @Override
    public void addExclusions(ExclusionRegistry registry) {
        registry.addUrlExclusions("/user/home");
    }
}

2) 可以使用 HDIV 的处理器生成 URL,如下所示,

 LinkUrlProcessor urlProcessor = HDIVUtil.getLinkUrlProcessor(servletContext);
 String processUrl = urlProcessor.processUrl(request, "/user/home");
 return "redirect:"+processUrl;

我希望这能解决问题。

【讨论】:

  • 1) 不建议这样做,因为您正在跳过对该 URL 的验证。 2) 没有必要,因为 HDIV 会拦截该重定向。
  • @FernandoLozano。你说的对。跳过验证不是最好的解决方案,但如果不注册(如第 2 点)URL,我们可能无法继续进行。
  • 写“redirect:”时,调用Spring MVC的RequestDataValueProcessor,可以看到here。 HDIV 实现了该接口,因此 HDIV 知道该重定向。无需注册该 URL。
  • 感谢 JayP!您建议的第二个解决方案有效并且符合我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2011-06-09
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多