我有一个页面可以重定向到另一个页面,但是参数在重定向中传递。在Controller中有一个url映射,它使用GET方法匹配url。 get方法获取参数并在显示器上设置值。网址如下所示:
http://localhost:1234/appName/pageName.htm?recNo=123
但是,用户很容易将参数值从123更改为任何值,然后刷新页面。一旦用户输入的recNo有效并刷新页面,将显示数据。我想允许用户只能查看传递的recNo的记录。我不希望用户能够修改网址中的参数。
在Spring MVC中处理此问题的最佳方法是什么?该方法必须是GET aftr页面被重定向。
答案 0 :(得分:3)
如果您要重定向到同一应用程序中的页面,则可以在会话使用中存储此信息@SessionAtrribute
答案 1 :(得分:3)
如果你的请求必须得到GET,那就意味着它必须是无国籍的。它不应该依赖于用户在上一个请求中所做的事情,这也意味着GET请求正确执行所需的所有信息都应该包含在GET请求中。
考虑到这一点,在URL中传递信息的唯一方法是将其作为URI的一部分,或者作为URL参数。
因此,/app/product/123
或/app/product?id=123
这会将URL暴露给可能的安全漏洞,用户可以在其中操作URL中的id
有两种解决方案:
在后端实现一个更强大的系统,以检查GET url中引用的id是否与尝试访问该URL的用户相关/允许。基本上更明确和谨慎地断言您的安全约束。如果您的用户是未经身份验证的用户,则此方法将失败。 (无需登录)。
第二种解决方案是在网址中公开id的加密和编码版本。您应该使用双向加密。因此,当POST请求完成时,它会对id进行加密和编码,并将其附加到后续的GET请求中。收到GET请求后,您解码并解密url参数以获取真实ID并显示适当的内容。该方法基本上意味着用户很难操纵ecrypted参数,使得它可以被解密以产生有效数字。我经常使用AES加密和Base 64编码。
希望这有帮助。
答案 2 :(得分:0)
假设:如果不强制使用" get"方法
我认为,您可以使用" post"隐藏URL中的参数。方法,而不是" get"方法
在HTML表单中,您可以添加method =" post" 。以下是示例:
<form action="hello" method="post">
<input type="text" name="name" /> <br>
<input type="submit" title="Submit">
</form>