Java EE 多种登录类型之间的安全重定向

Java EE secure redirect between multiple login types

我已经为我的 J2EE 网络应用程序实现了 kerberos sso 登录和 username/password 登录。

sso.jsp 处理单点登录,login.jsp 处理 username/password 登录。

用户访问 www.example.com/index.jsp 并且在 index.jsp 我将检查配置的登录类型(在配置文件中)是否为 SSODatabase 并将用户重定向到相应的 jsp 页面。

但是存在安全问题,当我将配置登录类型设置为SSO时,用户可以访问www.example.com/login.jsp。

当我将登录类型设置为Database(代表[=33]时,如何防止用户直接访问login.jsp,但仍然可以访问login.jsp =] 身份验证,反之亦然 SSO.

为什么不检测到 login.jsp 的请求,检查登录类型是否为 sso,然后重定向到 sso.jsp?这应该在 servlet 过滤器中完成。

@WebFilter(urlPatterns = "/login.jsp")
public class SecurityFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {
        final String loginType = request.getParameter("login-type");

        final HttpServletResponse servletResponse = (HttpServletResponse) response;
        if ("sso".equalsIgnoreCase(loginType)) {
            final String redirectUrl = "sso.jsp";
            servletResponse.sendRedirect(redirectUrl);
        } else {
            chain.doFilter(request, response);
        }
    }

}