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 : <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.如果登录界面是在别的服务器,也就是说用户管理服务不是与你在同一个域。
你的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>");
}