系统退出登陆的问题

ldpyes 2009-11-03 09:07:37
这个问题困扰我很长时间了,我做的系统是用java的struts框架设计的。系统登陆是这样的,当登陆到系统时,将username存入session中,每个页面的开头都会取这个session值,如果是空,则返回到登陆界面,这样做的好处是防止用户不通过登陆界面而直接在浏览器地址栏输入某一页面的地址进行访问。
可是问题是如果用户退出系统时,点击后退又可以重新返回系统主界面!这是我所不愿意看到的 .
不知道有没有人做过这方面的事情,我想只要是带有登陆界面的B/S结构的系统都应该有这个功能吧,正如我们退出邮箱后不可能通过后退再返回邮箱一样. 谢谢各位了!
...全文
305 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
steel1985 2009-11-05
  • 打赏
  • 举报
回复
(1)session清空
(2)用过滤器 Filter
(3)用拦截器
liuhua_sun 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 heng7421 的回复:]
你退出的时候把session清空就行了。
request.getSession().setAttribute("session名", null);
[/Quote]
实现也比较容易!
wifewifewife 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yygmh870908 的回复:]
退出登录时调用session的invalidate()方法;request.getSession(true).invalidate();
[/Quote]
完全同意。
wifewifewife 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 heng7421 的回复:]
你退出的时候把session清空就行了。
request.getSession().setAttribute("session名", null);
[/Quote]
完全正确!
不过还有一种比较好的方式:

自动获得所有用户的session,然后做一个遍历依次session.invalidate()就行了
crazystudy2011 2009-11-04
  • 打赏
  • 举报
回复
一楼正解!
soulxiaopan 2009-11-04
  • 打赏
  • 举报
回复
filter是解决访问权限的最好方法,我一直都用filter
鲜为人知 2009-11-04
  • 打赏
  • 举报
回复
这个问题怎么讨论了这么长时间,

LZ该结贴了。
xiaochengfu1 2009-11-04
  • 打赏
  • 举报
回复
filter
kky2010_110 2009-11-04
  • 打赏
  • 举报
回复

<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>wap.cn.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter>
<filter-name>LoginFilter2</filter-name>
<filter-class>wap.cn.filter.LoginFilter2</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

我找到了以前的项目,给楼主贴出来吧
kky2010_110 2009-11-04
  • 打赏
  • 举报
回复

package wap.cn.filter;

import java.io.IOException;

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;
import javax.servlet.http.HttpSession;

public class LoginFilter2 implements Filter{

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

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
HttpSession session = req.getSession();
StringBuffer url = req.getRequestURL();
String login = (String) session.getAttribute("login");

if (login!=null) {
chain.doFilter(request, response);
}else if (url.indexOf("login.jsp")>0) {//如果请求登陆页面通过
chain.doFilter(request, response);
}

else {

resp.sendRedirect("/CountFee/login/login.jsp");
}

}

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

}



}


package wap.cn.filter;

import java.io.IOException;

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;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter{

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

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
HttpSession session = req.getSession();
StringBuffer url = req.getRequestURL();
String login = (String) session.getAttribute("login");

if (login!=null) {
chain.doFilter(request, response);
}else if (url.indexOf("login.do")>0) {//如果请求登陆通过
chain.doFilter(request, response);
}

else {

resp.sendRedirect("/CountFee/login/login.jsp");
}

}

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

}



}


第一个过滤jsp页面,第二个过滤.do
不过首先要在在退出的servlet中清空session,如何是这两个过滤器起作用自己网上搜吧
小燕子淘就发 2009-11-03
  • 打赏
  • 举报
回复
退时把session清空应就可以了,至于struts嘛新的版本稳定,功能又全当然是用新的了
timeriver_wang 2009-11-03
  • 打赏
  • 举报
回复
退出时在action中写session.removeattrbuite("username");
在jsp页面中写
<%
if(session.getAttrbuite("username")==null){
response.sendRedirect(request.getContextPath()+"/error.jsp");
}
%>
就是重定向到错误页面

练习这样写还可以,应用时最好写个filter,过滤需要判断session的jsp或者action都行
要不代码太难维护了

另外struts1早晚会被抛弃的,缺点一大堆
建议学struts2
huangdh12 2009-11-03
  • 打赏
  • 举报
回复
退出的时候session.removeattrbuite("username");
javaors 2009-11-03
  • 打赏
  • 举报
回复
1楼正解,退出要清空SESSION,然后每一页都要判断SESSION是否为空,为空就跳错误页
zl3450341 2009-11-03
  • 打赏
  • 举报
回复
最简单的方法

写个js

不允许后退
yygmh870908 2009-11-03
  • 打赏
  • 举报
回复
退出登录时调用session的invalidate()方法;request.getSession(true).invalidate();
heng7421 2009-11-03
  • 打赏
  • 举报
回复
你退出的时候把session清空就行了。
request.getSession().setAttribute("session名", null);

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧