我正在使用jsf、ejb和jpa构建一个Web应用程序。我目前使用基于表单的j_security_check来处理身份验证。
我需要实现对cookie的支持,如"记住我"选项。我还想防止暴力攻击。即在5次登录失败后锁定某个用户
我明白,另一种选择是使用ServletFilters等以编程方式完成。
是否有任何方法实现所有这些使用j_security_check?还是我应该换回编程的方式?
这必须是围绕j_security_check的自定义实现。您可以使用j_security_check
附加servlet过滤器<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
在SecurityFilter中,安全检查返回userPrincipal后,在会话中设置进一步的详细信息并继续。但是,如果userPrincipal为空,则从数据库中获取失败计数,并将失败消息(包括失败计数)放入会话中,可以在登录页面中显示。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Principal userPrincipal = null;
String username = httpServletRequest.getParameter("j_username");
String rememberme = httpServletRequest.getParameter("rememberme");
chain.doFilter(request, response);
userPrincipal = httpServletRequest.getUserPrincipal();
Remember me必须在cookies上设置,变量"Remember me"的值将在j_security_check完成后可用。可根据登录成功或失败设置cookie。