如何防止用户在地址栏中直接输入action,进而登陆系统;
例如:在地址栏直接输入http://localhost:8080/XXXX/login
进而直接登陆系统。框架用的是S2+Spring+hibernate,高分求教~谢谢,需求详细代码。

解决方案 »

  1.   

    token啊 google下
      

  2.   

    你的登陆没有用户名、密码校验?
    我想你应该担心的不是这吧,你是怕用户跨过登陆页面直接查看页面吧。那你可以自定义个登陆拦截器,extends AbstractInterceptor。然后再struts.xml配置下即可。
      

  3.   

    如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox">
    <param name="uncheckedValue">0</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
    (必须加,否则出错)也可以改为对全局Action设置自己需要的拦截器,如下:
    在struts.xml里面定义全局的配置设置
        
       <package name="struts-shop" extends="struts-default">
        <interceptors>
          <interceptor-stack name="myStack">
            <interceptor-ref name="checkbox">
              <param name="uncheckedValue">0</param>
           </interceptor-ref>
           <interceptor-ref name="defaultStack"/>
          </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="myStack"/>(这句是设置所有Action自动调用的拦截器堆栈)
    </package>struts-action.xml里面配置Action如下:
    <package name="LogonAdmin" extends="struts-shop">(这里扩展struts.xml里面定义的配置就可以了)
    <action name="logon" class="logonAction">
         <result>/jsp/smeishop/admin/index.jsp</result>
         <result name="error">/jsp/smeishop/admin/logon.jsp</result>
         <result name="input">/jsp/smeishop/admin/logon.jsp</result>
       </action>
       <action name="logout" class="logoutAction">
         <result>/jsp/smeishop/admin/logon.jsp</result>
       </action>
    </package>你的拦截器可以正常工作了!!
    http://www.itzcn.com/video-vid-454-spid-20.html  视频链接
      

  4.   

    给你找了个以前用的,好多地方还得你自己改:拦截器:@SuppressWarnings("serial")
    public class LogonInterceptor extends AbstractInterceptor {
    private static Logger log = Logger.getLogger(LogonInterceptor.class); @SuppressWarnings("unchecked")
    public String intercept(ActionInvocation invocation) throws Exception {

    // 取得请求的Action名
    String name = invocation.getInvocationContext().getName();
    String methodname = invocation.getInvocationContext()
    .getActionInvocation().getProxy().getMethod();
    if (name.equals("login")) {
    // 如果用户想登录,则使之通过
    return invocation.invoke();
    }else {
    // 取得Session
    ActionContext ac = invocation.getInvocationContext();
    Map session = (Map) ac.get(ServletActionContext.SESSION);

    if (session == null) {

    // 如果Session为空,则让用户登陆。
    return "login";
    } else {
    Systemuser systemuser = (Systemuser) session.get("systemuser");
    if (systemuser == null) {
    // Session不为空,但Session中没有用户信息,
    // 则让用户登陆
    return "login"; } else {
    // 用户已经登陆,放行~ return invocation.invoke(); }
    }
    }
    }
    }
    struts.xml
    <package name="struts-interceptor" extends="json-default,struts-default">
    <interceptors>
    <interceptor name="logon" class="org.huajun.utils.LogonInterceptor" />

    <interceptor-stack name="checksession">
    <interceptor-ref name="logon" />
    <interceptor-ref name="defaultStack" />

    </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="checksession" />
    </package>
      

  5.   

    拦截器啊,struts2最核心,最好用的东西你都不用啊
      

  6.   

    一般我是通过过滤器解决的。例如这个action是已登录的用户才能访问,那么就可以在过滤器里写判断是否已登录,没有的话可以写转发代码转发到一个错误提示页面。
    给你个示例
    过滤类package com.game.manager.web;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.HttpSession;
    /**
     * 过滤器,防止未登录用户访问操作页面
     * @author chenqunaho
     * create date:2010-11-30 上午11:14:07
     */
    public class MyFilter implements Filter { public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain filter) throws IOException, ServletException {
    //请求对象
            HttpServletRequest req = (HttpServletRequest) request;
            //设置请求数据编码
            request.setCharacterEncoding("gbk");
            //会话对象
            HttpSession session=req.getSession();
            //判断用户是否已登陆
            if(session.getAttribute("username")==null)
            {
                    req.setAttribute("showInfo", "您未登陆,不能访问该页面!");
                    req.getRequestDispatcher("/WEB-INF/page/common/showInfo.jsp").forward(req, response);
                    return;
            }
            //继续往下执行
            filter.doFilter(request, response);
    } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub }}
    使用过滤器需要在web.xml中配置,主要该配置要写在struts的配置上面<!-- 配置过滤器 -->
        <filter>
              <filter-name>filter</filter-name> 
        <filter-class>com.game.manager.web.MyFilter(过滤器的类路径)</filter-class> 
        </filter>
              <filter-mapping>
                   <filter-name>filter</filter-name> 
              <url-pattern>/admin/*</url-pattern>
         </filter-mapping>