session超时或未登录时回到登录界面,如有frame跳出frame

1、写Filter类:例如LoginFilter:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginFilter implements Filter {

 public void destroy() {
  // TODO Auto-generated method stub

 }

 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  HttpServletRequest request = (HttpServletRequest) arg0;
  HttpServletResponse response = (HttpServletResponse) arg1;
  
  /** login filter */
  //signed
  if(request.getSession().getAttribute("USER_NAME") != null ||
    request.getRequestURL().indexOf("login.jsp") > -1 ||
    request.getRequestURL().indexOf("login.action") > -1){
   arg2.doFilter(arg0, arg1);
  }else{
   HttpServletResponse resp = (HttpServletResponse) response;
   String requestType = request.getHeader("X-Requested-With");
   if (requestType != null
     && requestType.equalsIgnoreCase("XMLHttpRequest")) {
    resp.setStatus(401);
   } else {
    resp.sendRedirect(request.getContextPath()+"/main/login.jsp");
   }
  }
  
 }

 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub

 }

2、如果未登录,直接在地址栏上输入url时会跳转到登录界面。但是如果是超时,那么他的登录界面还在那个frame里。要跳出这个frame。那么要在login.jsp里加一段代码:

<script type="text/javascript">
if(window!=top){
 top.location.href=location.href;
}
</script>

3、logout在一个frame里,如果点logout也跳不出frame。

<SCRIPT type="text/javascript">
function logout(){
 document.form1.submit();
}
</SCRIPT>
</head>
<body>

<div class="h2">
 <table>
  <tr>
   <td class="h3"><div class="h3"></div></td>
   <td class="h4" align="right"><div class="h4">User&nbsp;:&nbsp;<span class="h61"><s:property value="#session.USER_NAME.email"></s:property></span></div></td>
   <td class="h5" align="center"><div class="h5">|</div></td>
   <td class="h6">
     <div class="h6">
      <a href="#" class="hand" οnclick="logout()">Logout</a>
     </div>
   </td>
  </tr>
 </table>
 <form name="form1" action="logout.action" method="post"  target="_top"> </form>
</div>

</body>

加个form,并设置target为_top

 

 4.如果是用struts2,要在struts.xml 里的result加个type=redirect

<action name="logout" method="logout" class="com.tvunetworks.center.gs.web.action.LoginAction">
        <result name="success"  type="redirect">/main/login.jsp </result>
</action>


5.如果登录界面是在别的服务器,也就是说用户管理服务不是与你在同一个域。

http://user_ip/userservice

http://business_ip/business

你的business的用户是邮userservice,但userservice的登录界面你是不能改的。也就是说你不能在userservice的界面加_top。解决的办法是在自己的loginfilter里加。

把前面代码里的resp.sendRedirect(request.getContextPath()+"/main/login.jsp");

换成 goLogin(resp);


private void goLogin(HttpServletResponse resp) throws IOException{
  PrintWriter out=resp.getWriter();
  out.println("<html>");
  out.println("<script>");
  out.println("window.open('"http://user_ip/userservice"','_top')");
  out.println("</script>");
  out.println("</html>");
 }

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值