gpt4 book ai didi

Apache Shiro 和多重身份验证

转载 作者:行者123 更新时间:2023-12-02 06:06:54 24 4
gpt4 key购买 nike

我正在开发一个应用程序,在该应用程序中实现了基于 Apache Shiro 的身份验证。我现在可以让用户在我的数据库支持下成功登录。我知道想要改进这一点并允许迈出第二步。

所以场景是:

用户 1 未启用多重身份验证。他使用凭据成功登录。

用户 2 确实启用了多重身份验证。他像往常一样登录,Apache Shiro 验证用户名/密码。完成此操作后,我希望 Apache Shiro 显示另一个屏幕,用户 2 可以在其中输入一次性密码。并且只有在正确时才能完全登录。

在 Apache Shiro 中我可以注入(inject)我的更改吗?我找不到太多相关文档。

最佳答案

我有一个类似的要求,即身份验证后的 OTP,我使用普通过滤器来过滤掉所有请求。在 use bean 中创建一个属性,如 isOTPEnabled 并在过滤器中进行比较。

我的简单otpFliter代码如下,但您可以根据需要制作自己的代码,例如jsf等。您必须添加一个登录,如果用户bean将OTPenabled设置为true,则它会过滤:

/**
* Servlet Filter implementation class OTPFilter
*/
@WebFilter(urlPatterns = {"/*"},initParams={@WebInitParam(name="enabled",value="0")})
public class OTPFilter implements Filter {

/**
* Default constructor.
*/

boolean enabled=true;


public OTPFilter() {
// TODO Auto-generated constructor stub
}

/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}

/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here

// pass the request along the filter chain
//System.out.println(enabled);
if(enabled){
if(SecurityUtils.getSubject().getPrincipal()!=null){
if(request instanceof HttpServletRequest ){
HttpSession session = ((HttpServletRequest) request).getSession();
LoggedInUser user = (LoggedInUser) session.getAttribute("userinfo");
String url = ((HttpServletRequest) request).getRequestURL().toString();
//System.out.println("url is "+ url);

if( !url.contains("public") && !user.isOTPverified() && user.isOTPEnabled()){



if(user.getOTP() == null)
{
user.setOTP(OTPUtils.generateOTP());
}
//user.setOTPverified(true);
((HttpServletRequest) request).getRequestDispatcher("OTP.jsp").forward(request, response);

return;
}
}
}


}

chain.doFilter(request, response);
}

/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
//System.out.println("fConfig.getInitParameter :" + fConfig.getInitParameter("enabled"));
enabled = fConfig.getInitParameter("enabled").equals("1");
}

}

关于Apache Shiro 和多重身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666841/

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