- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道 ServletResponse.reset()
是否是我需要阻止未登录用户访问 servlet 的额外步骤,或者它是否存在风险或缺点。
背景:
方式my website有效,最初用户只能在创建帐户并使用这些凭据登录后才能看到某些页面。我最初遇到的问题是,即使我使用了 session.invalidate()
,当用户注销时,他们可以重新发送请求(例如,通过后退按钮)并且能够从未授权状态访问受限内容。假设 session 已过期,如上所述,我不确定这怎么可能或者可以采取什么措施来防止它发生。
通过实验,作为一种变通方法,我尝试了 ServletResponse.reset()
,似乎 解决了它,但我不明白它为什么起作用,并且因此,我不确定这是一个可靠可行的解决方案。
我的具体问题是:
重置响应缓冲区(包括 header 和 http 状态代码)是安全的还是推荐的做法,或者有更好的方法吗?
我如何管理使用 session 对象而不是使用 session cookie 的登录?
最佳答案
我不认为 ServletResponse.reset()
会造成任何伤害,但它不是标准操作程序,因此没有必要。只需确保您在使 session 无效和验证 session 方面都做了正确的事情。
使 session 无效:
session.invalidate()
以删除绑定(bind)到 session 的 session 属性,但还要确保您的代码明确删除它自己对先前 session 状态的陈旧引用。可以通过使用完全匹配的条件定位 cookie 并将其最长期限设置为 0 来明确删除 session cookie。验证 session :
getSession(false)
是否返回null来判断是否有事件 session 。如果是这样,那么您可以使其无效,并且您可以也检查request.isRequestedSessionIdValid()
,或明确检查是否存在您在 session 管理中使用的任何特定属性方案。这将使您能够正确验证 session 的状态。来自 JavaDocs:
ServletResponse
void reset()
Clears any data that exists in the buffer as well as the status code and headers. If the response has been committed, this method throws an IllegalStateException.
void invalidate()
Invalidates this session then unbinds any objects bound to it.
ServletRequest
boolean isRequestedSessionIdValid()
Checks whether the requested session ID is still valid.
HttpSession getSession(boolean create)
Returns the current HttpSession associated with this request or, if there is no current session and create is true,
returns a new session. If create is false and the request has no valid HttpSession, this method returns null.
To make sure the session is properly maintained, you must call this method before the response is committed.
is using cookies to maintain session integrity and is asked to create a new session when the response is committed, an IllegalStateException is thrown.
关于http - ServletResponse.reset() 是阻止未经授权(注销)用户访问 servlet 的可行方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517344/
据我所知,要将声音设置为铃声,应将其插入 MediaStore。在 MediaStore 中写入,需要 WRITE_EXTERNAL_STORAGE 权限。但是...有没有办法在不需要 WRITE_E
我只是想设置铃声。我不想授予 WRITE_SETTINGS 权限,我可以找到大部分答案来授予 WRITE_SETTINGS 权限但是我正在使用一个应用程序,该应用程序没有设置铃声的 WRITE_SET
我在 Windows 10 中以管理员身份运行 Android studio。AVD 是 Nexus 5X API 28。我正在尝试运行 flutter 演示,但设备下拉框仍然显示“无设备”,它只是有
我的应用程序构建于 spring-social-twitter允许用户使用 Twitter 登录的功能最近已停止工作。 我收到如下错误消息: Callback URL not approved for
我正在尝试使用 python-firebase 更新 Firebase库,但无法使用经过修改的示例代码进行身份验证: from firebase import firebase as fb auth
今天,当我尝试使用 GCC7 编译一个非常简单的 C++ 程序时,我遇到了一个非常奇怪的问题:程序没有向构造函数中的 vector 添加任何元素,当编译时没有优化(例如 -O0/-Og ) 来自 Re
简单问题:我正在尝试使用 Discord API 备份服务器(或公会,如果您使用官方术语)上的所有消息。 因此,我实现了 OAuth,没有任何问题,我有访问 token ,并且可以查询一些端点(我尝试
您好,我正在使用 msdn 中的以下代码供我公司内部使用: using System; public sealed class Singleton { private static volati
我们从 Google 的 GCM 服务中收到间歇性的 401 Unauthorized 错误。在过去,它 100% 的时间都有效。该问题可能与我们的路由器接受 IPv6 流量同时发生,但即使我们在适配
我有一个使用 Playwright + TS-Jest 设置 E2E 测试的项目。为了组织我的测试,我使用页面对象模型。结构看起来像这样: 我想在 tsconfig.json 中使用 TypeScri
我有一个后端应用程序在 Google Cloud Storage 中同步文件,我想在 javascript 中列出存储中的所有文件,而不需要从后端请求它们。我已经设置了 CORS,并且所有文件的 ac
我在尝试在私有(private) gitlab 存储库中发布 Artifact 时遇到问题。我正在使用 Maven 并使用个人访问 token 进行身份验证。当我运行 mvn deploy -s ~/
这是从 Google+ 登录中使用的 GoogleApiClient 获取 token 的传统方式: String token = GoogleAuthUtil.getToken(apiClient.
我在阅读 facebook Open Graph 文档后比较确定我不能让网站“订阅”公共(public)页面,除非该页面安装了我的应用程序。如果那是错误的,请告诉我。 我想做的是一个照片库,非常简单,
我是一名优秀的程序员,十分优秀!