gpt4 book ai didi

java - Tomcat SecurityFilter 和授权

转载 作者:行者123 更新时间:2023-11-28 22:23:19 25 4
gpt4 key购买 nike

我已经实现了一个简单的过滤器,它只是将两个原则添加到当前 session (请参阅下面的 doFilter)。我的问题是,当我请求资源时,这会触发,但由于弹出基于 FORM 的登录屏幕,所以我永远无法看到该资源。我正在尝试使用此特定过滤器(最终使用快速过期 token )绕过基于表单的登录,但似乎没有任何东西允许我这样做。

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httprequest = (HttpServletRequest)request;
HttpServletResponse httpresponse = (HttpServletResponse)response;
HttpSession session = httprequest.getSession(true);
Subject subject = (Subject)session.getAttribute("javax.security.auth.subject");

if (subject == null){
subject = new Subject();
PlainUserPrincipal user = new PlainUserPrincipal("admin");
PlainRolePrincipal role = new PlainRolePrincipal("admin");
subject.getPrincipals().add(user);
subject.getPrincipals().add(role);
}

chain.doFilter(httprequest, httpresponse);
}

最佳答案

由于安全原因,您不能在运行 Tomcat 时将 servlet/过滤器映射到 /j_security_check 的 URL 模式。这些症状表明您正在这样做。我特指 Tomcat,因为我见过它适用于其他(特定)容器品牌/版本的案例。但您不想依赖它。

而是过滤 /*,或者至少过滤与您的安全约束相同的 URL 模式,并拦截用户主体的存在和 session 对象的缺失。

if (request.getUserPrincipal() != null && session.getAttribute("subject") == null) {
Subject subject = new Subject();
// ...
session.setAttribute("subject", subject);
}

chain.doFilter(request, response);

关于java - Tomcat SecurityFilter 和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4833781/

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