像 编辑 删除 这种。。情况。。我以前经常用 get 提交。。后面跟个ID 就完了。。后来 发现 只要有人登陆。。他可以随便 在URL 后面 手动输入 ID 就可以编辑 删除别人的东西。以前根本没意识到这个问题。。大家 一般处理这种问题 是怎么做的呢?有比较好点方法吗?

解决方案 »

  1.   

    添加过滤器或拦截器验证session。
      

  2.   

    用post方式提交,以及楼上的方法
      

  3.   

    1.public class AdminFilter extends HttpServlet implements Filter 2.public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {
    // TODO Auto-generated method stub
    HttpServletRequest request = (HttpServletRequest)arg0;
    String uri = request.getRequestURI();
    if(uri.indexOf("login", 0)>-1){
    arg2.doFilter(arg0, arg1);//继续
    }
    else if(1==2){
    System.out.println("判断是不是管理员.");
    HttpServletResponse response = (HttpServletResponse)arg1;
    response.sendRedirect("login.jsp");
    }else{
    System.out.println("判断是管理员...请求继续");
    arg2.doFilter(arg0, arg1);//继续
    }
    }3.于web.xml配置
    <!-- FILTER -->
    <filter>
    <filter-name>AdminFilter</filter-name>
    <filter-class>com.accp.web.AdminFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>AdminFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
      

  4.   

    把你所有的操作都改成post方式,然后再过滤器里获得以下提交方式,如果是post就通过,如果是get就不通过
      

  5.   

    用自定义拦截器比较好 毕竟过滤器要用于转换类型 负担不小了已经
    public class UserInterceptor implements Interceptor { public void destroy() { } public void init() { } public String intercept(ActionInvocation invocation) throws Exception {
    Map session = invocation.getInvocationContext().getSession();
    if (session.get("admin") != null) {
    return invocation.invoke();
    } else {
    if (invocation.getProxy().getActionName().equals("Admin_doLogin")
    || invocation.getProxy().getActionName().equals(
    "Admin_toLogin")
    || invocation.getProxy().getActionName().equals(
    "Admin_toInitialize")) {
    return invocation.invoke();
    }
    return Action.LOGIN;
    }
    }
    }