如何防止用户跳过登录页面直接访问要登陆后才可以访问的页面呢?

时间:2022-11-17 17:10:49
如何防止用户跳过登录页面直接访问要登陆后才可以访问的页面呢?都说用Struts2的拦截器,请问您们常用的是这个吗? 另外,如何进行权限管理?某个页面只有经理才可访问这该怎么做?

谢谢了

14 个解决方案

#1


每次请求时判断session

#2


引用 1 楼 lxf001002 的回复:
每次请求时判断session

一般用的不是Struts2的拦截器嘛?

#3


 在拦截器里面判断session是否存在...

#4


我在每个页面里面都判断了session,这种方式是不是最常用的呢?请问各位前辈,那么权限管理一般用什么呢?也是在页面里面判断Session?谢谢了哦

#5


我也一直对这个问题很困扰 解决的方式也同楼上一样,反正只要是页面 我都在访问的时候给加上个判断 看session里面有没有值 没有就直接给屏蔽了 感觉如果有个几百个页面  也太烦了吧 mark 求学习

#6


。。。有一种东西叫过滤器

#7


struts2的拦截器也很简单

#8


不用每个页面都去判断session吧,还是建议写一个filter

#9


用filter结合session
例如:
public class CheckStuLoginFilter implements Filter {

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

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
Stuinfo stuinfo = (Stuinfo) session.getAttribute("stuinfo");
String requestURI = req.getRequestURI().substring(
req.getRequestURI().indexOf("/", 1),
req.getRequestURI().length());
if (!requestURI.equals("/index.jsp")) {
if (stuinfo == null) {
resp.sendRedirect(req.getContextPath() + "/index.jsp");
return;
}
}
chain.doFilter(request, response);
}

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

}

}

#10


如果每个页面判断session的话,那就太费事。我们项目的做法是:首先把你们普通页面统一放在WEB-INF下面(这样通过浏览器是直接访问不了的),然后每个页面请求都通过action转发每个对应的jsp页面即可。接着直接写一个拦截器就可以搞定在没有登陆的情况下,无法访问你指定不能访问的那个页面。还有WEB-INF下的目录也有一些小技巧,分文件夹放文件很重要,方便做拦截。
如:
   String target1 = req.getContextPath()+"/ order/";
     String target2 = req.getContextPath()+"/ manager/";
     if(dest.startsWith(target2)) {
     Object obj = req.getSession().getAttribute("admin");
                      if(obj != null) {
                          ...
                       } else {
                          ...
                       }
         }

#11


至于权限其实也是一样的,在数据库中给每个用户一个权限码,数字什么的都可以。在访问的时候,可以拦截器中的session中的读取这个权限码,如果是“经理”,通过。否则通过拦截器拦截到你知道的页面即可。

#12


用过滤器或者拦截器

#13


拦截器、filter都能解决的。。

#14


登录后在session中加一标识,访问要登录的页面时用拦截器或filter判断该标识

#1


每次请求时判断session

#2


引用 1 楼 lxf001002 的回复:
每次请求时判断session

一般用的不是Struts2的拦截器嘛?

#3


 在拦截器里面判断session是否存在...

#4


我在每个页面里面都判断了session,这种方式是不是最常用的呢?请问各位前辈,那么权限管理一般用什么呢?也是在页面里面判断Session?谢谢了哦

#5


我也一直对这个问题很困扰 解决的方式也同楼上一样,反正只要是页面 我都在访问的时候给加上个判断 看session里面有没有值 没有就直接给屏蔽了 感觉如果有个几百个页面  也太烦了吧 mark 求学习

#6


。。。有一种东西叫过滤器

#7


struts2的拦截器也很简单

#8


不用每个页面都去判断session吧,还是建议写一个filter

#9


用filter结合session
例如:
public class CheckStuLoginFilter implements Filter {

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

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
Stuinfo stuinfo = (Stuinfo) session.getAttribute("stuinfo");
String requestURI = req.getRequestURI().substring(
req.getRequestURI().indexOf("/", 1),
req.getRequestURI().length());
if (!requestURI.equals("/index.jsp")) {
if (stuinfo == null) {
resp.sendRedirect(req.getContextPath() + "/index.jsp");
return;
}
}
chain.doFilter(request, response);
}

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

}

}

#10


如果每个页面判断session的话,那就太费事。我们项目的做法是:首先把你们普通页面统一放在WEB-INF下面(这样通过浏览器是直接访问不了的),然后每个页面请求都通过action转发每个对应的jsp页面即可。接着直接写一个拦截器就可以搞定在没有登陆的情况下,无法访问你指定不能访问的那个页面。还有WEB-INF下的目录也有一些小技巧,分文件夹放文件很重要,方便做拦截。
如:
   String target1 = req.getContextPath()+"/ order/";
     String target2 = req.getContextPath()+"/ manager/";
     if(dest.startsWith(target2)) {
     Object obj = req.getSession().getAttribute("admin");
                      if(obj != null) {
                          ...
                       } else {
                          ...
                       }
         }

#11


至于权限其实也是一样的,在数据库中给每个用户一个权限码,数字什么的都可以。在访问的时候,可以拦截器中的session中的读取这个权限码,如果是“经理”,通过。否则通过拦截器拦截到你知道的页面即可。

#12


用过滤器或者拦截器

#13


拦截器、filter都能解决的。。

#14


登录后在session中加一标识,访问要登录的页面时用拦截器或filter判断该标识