如何使用 j_security_check 在 React.JS 应用程序上对用户进行身份验证

Posted

技术标签:

【中文标题】如何使用 j_security_check 在 React.JS 应用程序上对用户进行身份验证【英文标题】:How to authenticate users on a React.JS app using j_security_check 【发布时间】:2018-12-28 06:43:39 【问题描述】:

我正在开发一个使用 ReactJS 的应用程序。我将在 TomCat 服务器上运行应用程序并使用 Maven 进行部署。对于过去的应用程序,我使用 j_security_check 对用户进行身份验证,并希望以同样的方式在 React 应用程序中对用户进行身份验证。

我的问题在于我不确定如何设置我的 web.xml 文件来限制访问并提示登录。由于 React 只有一个 html 文件和一个 js 文件,我如何限制访问并重定向到不同的组件?我需要有一个单独的 html 页面来登录吗?

如果这是必须以编程方式完成的事情,我将如何设置一个 HttpRequest 来做到这一点,这将是安全的?我尝试了以下代码,但在尝试登录时出现 404 错误。

handleSub(fields) 
  var xhttp = new XMLHttpRequest();
  xhttp.open("POST", "j_security_check", true);
  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhttp.send("j_username=fields.username&j_password=fields.password");

【问题讨论】:

【参考方案1】:

对于遇到此问题的其他人,以下是我们如何使其正确验证。

在加载网站时,我们会自动加载登录页面。 在 componentDidMount 上,我们调用一个函数,该函数将 XMLHttpRequest 发送到获取位于网站服务器中的文件。文件路径在网站 web.xml 中受到限制,导致它尝试使用 j_security_check 进行身份验证。出于安全考虑,网址已被删除。

callSecuredFile()
var secure = new XMLHttpRequest();
var url = "/website_name/private/filename.txt";
secure.onreadystatechange = function()
  if(secure.readyState === 4 && secure.status ===200)
    try
      var verificationJSON = JSON.parse(secure.responseText);
      if(verificationJSON.loggedIn === true)
        ReactDOM.render( this.renderSite(document.getElementById('MainPage'));
      
    
    catch(e)
      console.log(e);
    
  
.bind(this);
secure.open('GET', url, true);
secure.send();

如果用户已经通过身份验证并且有一个活动会话,那么登录页面将被删除,然后将呈现主网站。

否则用户将使用他们的凭据登录,创建一个活动会话并加载主页。

【讨论】:

以上是关于如何使用 j_security_check 在 React.JS 应用程序上对用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里可以找到“j_security_check”?

j_security_check 过滤器在 jboss eap 6.4 中不起作用

Apache 背后的 Tomcat:将 SSL 与 j_security_check 结合使用

使用 Servlet 过滤器和 j_security_check 登录时出现无限循环

如果 JSF 页面受 j_security_check 保护,则不会在 ajax 请求上引发 ViewExpiredException

J_security_check 在 Firefox 4 中失败