【问题标题】:Avoiding re-authentication in filter if we click on reset button如果我们点击重置按钮,避免在过滤器中重新认证
【发布时间】:2014-04-04 10:27:58
【问题描述】:

要求:当我点击我的网络应用程序中的重置按钮时,它不应显示重新身份验证弹出窗口。

HTML 代码:

<button type="reset" onclick="reloadcurrentpage(false)">Reset</button>

JS 代码

function reloadcurrentpage(isAuthenticationRequired){

   window.location=window.location.href+"?isAuthenticationRequired"+isAuthenticationRequired;

}

我有 UserAuthenticationFilter ,它可以看到页面是否已经过身份验证。当它进入控制器时,我通过将布尔值存储到会话范围内的某个变量来做到这一点。 让我让你更清楚。让我们假设它是第一次进行身份验证

控制器代码

public class MyController{

   public Object formBackingObject(HttpServletRequest request){
      request.getSession.setAttribute("isAuthenticated",true)
   }
}

过滤代码:

  public class Fitler{

    doFilter(request,response,filterChain){

         if(request.getSession.getAttribute("isAuthenticated")){
             request.getSession.remove("isAuthenticated");
             fitlerChain.doFilter(request,response) ;
         }else{

             reponse.sendRedirect("showAuthenticationPopUp")
         }

    }//doFilter ends//

   }//filter class ends

我为避免重新验证而采用的方法

1)当我点击重置时说 URL 形成是 http.india.com/myController?isAuthenticationRequired=false 其他时候是 http.india.com/myController

现在,当我单击重置按钮并在过滤器中为此查询字符串编写适当的代码时,我可以避免重新验证,但问题是当我刷新页面时,也会避免重新验证,这不应该发生。原因是当我单击重置时,形成的 url 是 http.india.com/myController?isAuthenticationRequired=false 所以每次我刷新页面时都会避免重新验证,这将是另一个问题。

2)我遵循的第二种方法是当 URL 具有该参数时,我调用了

response.redirect(request.getURI());

这已被查询字符串删除,但它让我再次验证页面。

3)我遵循的第三种方法是使用 Ajax 请求,它对我有用,但证明代价高昂,因为我必须更改 45 多个重新身份验证文件并调整响应。

请为此提出一些方法。

【问题讨论】:

    标签: java servlets filter query-string


    【解决方案1】:

    在页面加载时,我正在使用历史对象从浏览器中删除 URL。

    if(location.search.contains("isAuthenticationRequired=false")){
      history.replaceState(null,documnent.title,location.pathname)
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多