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
我将检查配置的登录类型(在配置文件中)是否为 SSO
或 Database
并将用户重定向到相应的 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);
}
}
}
我已经为我的 J2EE 网络应用程序实现了 kerberos
sso
登录和 username/password 登录。
sso.jsp
处理单点登录,login.jsp
处理 username/password 登录。
用户访问 www.example.com/index.jsp 并且在 index.jsp
我将检查配置的登录类型(在配置文件中)是否为 SSO
或 Database
并将用户重定向到相应的 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);
}
}
}