日期:2014-05-18  浏览次数:20822 次

关于使用session禁止用户跳过登陆界面的问题~~~!!!
除了登陆页面之外,我都用了session去检查用户信息是否存在!!
具体方法是这样的
我写了一个sessionCheck.inc文件
  String   userID   =   (String)session.getAttribute(Constants.USER_ID);
  if   (userID   ==   null)
  {
          response.sendRedirect( "page/login.jsp ");
  }

然后在需要验证的页面都加上
<%@   include   file= "inc/sessionCheck.inc "   %>

但是还是可以通过url直接访问,好像不起作用

请问各位高手这是为什么?

用的是struts框架

------解决方案--------------------
这个问题很好解决!
1.你在用户成功登陆之后,在Session中放一个任意字符串,譬如userVip,你可以在Action中验证用户名、密码成功之后写这样一句
HttpSession session=request.getSession();
session.setAttribute( "param ", "userVip ");
2.再写一个过滤器类,这个类要实现Servlet的Filter接口,在doFilter方法里,你可以这么写:
HttpSession session=request.getSession();
String s=(String)session.getAttribute( "param ");
//如果成功登陆,session范围内取出的param的值一定是userVip,这样就会继续过滤链
为了增加程序的健壮性,可以再加一步,Object object=session.getAttribute( "param ");我们判断一下object是否是null,不是再转成String类型的对象!

if(s.equals( "userVip "))
{
filterChain.doFilter(request,response);
}
else
{
try{
response.sendRedirect( "/error.jsp ");
}
catch{
//
}
3.在web.xml中将这个过滤器类配置一下,下面的是具体代码
<filter>
<filter-name> userFilter </filter-name>
<filter-class> net.ilkj.util.UserFilter </filter-class>
</filter>
<filter-mapping>
<filter-name> userFilter </filter-name>
<url-pattern> /user/* </url-pattern>
</filter-mapping>
这样,所有在user目录下的JSP都会受到保护,不登陆,session中就不会有userVip,当然就访问不到user下的页面,当然过滤器会将user下的所有文件过滤,包括图片、CSS样式文件、JS文件等等,所以请不要将公共引用的文件放到这个目录下!
因为你用Struts了,我们不得不考虑Action的安全问题,凡是用于用户中心登陆成功之后使用的Action在Struts-config.xml中的path配置时都要以/user/...Action这样的形式,是Action也受到过滤器的保护!
以上的代码我都是在这里敲的,没有用Eclipse,可能会有错误,你可以自己更正一下!我现在在网吧,没办法把我自己站点的代码贴上来,主机上放都是编译后的class文件,没有src下的java文件哦!不好意思啦!将就看吧!
这样应该万无一失了吧!嘿嘿!
上面所说的是我的网站的用法,欢迎访问小弟的站点 www.ilkj.net