gpt4 book ai didi

Java HttpServletRequest isUserInRole 无法正常工作(根据请求安全性)servlet api 2.4

转载 作者:行者123 更新时间:2023-11-28 23:29:09 24 4
gpt4 key购买 nike

我正在构建一个由 tomcat 提供服务的 Web 应用程序(使用 servlet api 2.4,目前无法切换到 servlet api 3.0)。我正在尝试使用 HttpServletRequest.isUserInRole 动态保护某个 url 模式。

我有多个使用 web.xml 文件保护的 servlet:

<servlet-mapping>
<servlet-name>MySecuredServlet</servlet-name>
<url-pattern>/my/secured/servlets/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MyDispatcher</servlet-name>
<!-- This servlet won't be secured because only some of the servlets this dispatcher calls will be secured -->
<url-pattern>/my/dispatcher/*</url-pattern>
</servlet-mapping>
...
<security-constraint>
<web-resource-collection>
<url-pattern>/my/secured/servlets/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>

我还有一些其他的 servlet,我无法将它们写入 web.xml 文件中,因为我在构建时不知道它们。

我正在向一些动态设置的 servlet 发送请求,其中一些需要授权。

class MyDispatcher extends HttpServlet {
...
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {

// I am dispatching requests to dynamically set customServlets which I don't know at build time
MyCustomServlet customServlet = MyCustomServlets.get(req.getPathInfo());
if (customServlet != null) {

if (customServlet.requiresAuthorization()) {
// isUserInRole is not reliable. It returns false when it should return true. Why?
if (!req.isUserInRole(ADMIN_ROLE_NAME)) {
resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
}

customServlet.doGet(req, resp);
}
}
}

进一步说明:

在 url-pattern /admin 我提供了一个在 web.xml 文件中 protected 页面。

从该页面我向动态 servlet 发出 XMLHttpRequests 并且我希望 isUserInRole 方法返回 true 因为用户在访问 /admin 最初。

但是 isUserInRole 为所有请求返回 false,直到我在浏览器中刷新 /admin 页面。为什么会这样?我该如何解决?

最佳答案

我正在使用 JAX-RS 的 RestEasy 实现,所以这个答案可能只对 RestEasy 有效。

如果不对请求调用 request.session.getId(),Tomcat 似乎不会对请求设置身份验证 cookie。

所以我必须做的是在发出我自己的请求之前在请求中调用 session.getId()。

之后 req.isUserInRole(MY_ROLE) 正确返回。

关于Java HttpServletRequest isUserInRole 无法正常工作(根据请求安全性)servlet api 2.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32947390/

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