在web应用中,怎样防止用户跳过登录,直接进入登陆成功页面?

时间:2023-02-03 17:10:38
   在网页中,首页是登录页面,但是如果用户知道你的登录成功之后的页面的地址,那么就可以直接访问而跳过登录,请问怎样防止这种情况发生?

14 个解决方案

#1


在后面几个页面都添加访问控制,通常是判断session是否有登录信息,如果没有则跳转到登录页面。

#2


在登陆的时候设置session setAttribute("user",user);
 在每个页面增加session判断,判断是否有user存在,
如果有的话,说明登陆过的;
如果没有的话,自动跳转到登陆页面
 这样就OK了;

另外还可以使用在web.xml中配置过滤器实现.

#3


给你个简单的方法,在每个需要登陆后才能看的页面加上
<%
     if(session.getAttribute("login")==null)
         response.sendRedirect("登陆页面");
       
%>
当登陆时,

  session.setAttribute("login","success");


不过能常的做法是用过滤器。

#4


写个过滤器。。。
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;
/**
 * 用户登录过滤
 * 
 * @author cuilike
 *
 */
public class LoginFilter implements Filter {

protected FilterConfig filterConfig; 

public void destroy() {
 this.filterConfig=null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest hreq = (HttpServletRequest)request;
HttpServletResponse hres  = (HttpServletResponse) response;
HttpSession session = hreq.getSession();
if(session == null){
filterChain.doFilter(request,response);
return;
}

//获取配置的登陆路径
String loginpath = filterConfig.getInitParameter("loginpath");
if(session.getAttribute("loginaccount") == null){
hres.sendRedirect(hreq.getContextPath() + loginpath );
return;
}
filterChain.doFilter(request,response);
}

public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}

}

#5


有没有高级点的方法~我感觉应该有

#6


如果用的是cokiee呢

#7


没有用cookie的,谢谢。

#8


  收回刚才那句话,对于安全要求不高的可以用cookie。


在网页中,首页是登录页面,但是如果用户知道你的登录成功之后的页面的地址,那么就可以直接访问而跳过登录,请问怎样防止这种情况发生?

这种情况用cookie做不合适。

#9


能告诉为什么么?

#10


首选过滤器,其次可以用各种flag等小巧办法。类似防止连续点击之类的。

#11


这种问题是绝对要用过滤器过滤最好的,当然,判断session也是办法,项目里面一般都是用过滤器
具体过滤器的使用方法也很简单,楼主随便去找点资料就是了,多的是
过滤器不过就是一个java class罢了,实现javax.servlet.Filter接口,重写doFilter方法,如下
<code>
public void doFilter(ServletRequest request, ServletResponse response, 
                        FilterChain filterChain) 
                            throws IOException, ServletException { 

/*请求时,执行这里的代码,所以你要在这里写上判断用户是否登陆*/
if(登陆){
   跳转到成功页面
}else{
   跳转到失败页面或者从新回到登陆页面
   
}
......

filterChain.foFilter(request, response);

/*响应的时候执行这里的代码*/
.....
}
</code>

#12


个人认为用过滤器最好

#13


首选过滤器,这是过滤器的优点所在。cookie优点不在这,LZ应该好好研究下过滤器在这的用处!

#14


<%
String userName = (String)session.getAttribute("userName");
if(userName == null || userName == "") {
response.sendRedirect("login.jsp");
}
 %>

#1


在后面几个页面都添加访问控制,通常是判断session是否有登录信息,如果没有则跳转到登录页面。

#2


在登陆的时候设置session setAttribute("user",user);
 在每个页面增加session判断,判断是否有user存在,
如果有的话,说明登陆过的;
如果没有的话,自动跳转到登陆页面
 这样就OK了;

另外还可以使用在web.xml中配置过滤器实现.

#3


给你个简单的方法,在每个需要登陆后才能看的页面加上
<%
     if(session.getAttribute("login")==null)
         response.sendRedirect("登陆页面");
       
%>
当登陆时,

  session.setAttribute("login","success");


不过能常的做法是用过滤器。

#4


写个过滤器。。。
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;
/**
 * 用户登录过滤
 * 
 * @author cuilike
 *
 */
public class LoginFilter implements Filter {

protected FilterConfig filterConfig; 

public void destroy() {
 this.filterConfig=null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest hreq = (HttpServletRequest)request;
HttpServletResponse hres  = (HttpServletResponse) response;
HttpSession session = hreq.getSession();
if(session == null){
filterChain.doFilter(request,response);
return;
}

//获取配置的登陆路径
String loginpath = filterConfig.getInitParameter("loginpath");
if(session.getAttribute("loginaccount") == null){
hres.sendRedirect(hreq.getContextPath() + loginpath );
return;
}
filterChain.doFilter(request,response);
}

public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}

}

#5


有没有高级点的方法~我感觉应该有

#6


如果用的是cokiee呢

#7


没有用cookie的,谢谢。

#8


  收回刚才那句话,对于安全要求不高的可以用cookie。


在网页中,首页是登录页面,但是如果用户知道你的登录成功之后的页面的地址,那么就可以直接访问而跳过登录,请问怎样防止这种情况发生?

这种情况用cookie做不合适。

#9


能告诉为什么么?

#10


首选过滤器,其次可以用各种flag等小巧办法。类似防止连续点击之类的。

#11


这种问题是绝对要用过滤器过滤最好的,当然,判断session也是办法,项目里面一般都是用过滤器
具体过滤器的使用方法也很简单,楼主随便去找点资料就是了,多的是
过滤器不过就是一个java class罢了,实现javax.servlet.Filter接口,重写doFilter方法,如下
<code>
public void doFilter(ServletRequest request, ServletResponse response, 
                        FilterChain filterChain) 
                            throws IOException, ServletException { 

/*请求时,执行这里的代码,所以你要在这里写上判断用户是否登陆*/
if(登陆){
   跳转到成功页面
}else{
   跳转到失败页面或者从新回到登陆页面
   
}
......

filterChain.foFilter(request, response);

/*响应的时候执行这里的代码*/
.....
}
</code>

#12


个人认为用过滤器最好

#13


首选过滤器,这是过滤器的优点所在。cookie优点不在这,LZ应该好好研究下过滤器在这的用处!

#14


<%
String userName = (String)session.getAttribute("userName");
if(userName == null || userName == "") {
response.sendRedirect("login.jsp");
}
 %>