【发布时间】: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