我用的是SSH2框架 如题:怎么操作 谢谢。

解决方案 »

  1.   

    过滤器过滤项目下所有资源
    请求每个资源的时候先检查session是不是null,如果是,则提示session过期或未登录跳转到登陆页面或者是提示页面;否则返回请求资源。
      

  2.   

    用拦截器来实现,当然要在struts.xml中给每个action配置拦截器
    package filter;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import bean.User;import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/** session过期、登录有效性及操作的权限验证拦截器 */
    public class LoginedCheckInterceptor extends AbstractInterceptor { /** 拦截请求并进行登录有效性验证 */
    public String intercept(ActionInvocation ai) throws Exception {
    //取得请求的URL
    String url = ServletActionContext.getRequest().getRequestURL().toString();
    HttpServletResponse response=ServletActionContext.getResponse();
    response.setHeader("Pragma","No-cache");          
    response.setHeader("Cache-Control","no-cache");   
    response.setHeader("Cache-Control", "no-store");   
    response.setDateHeader("Expires",0);
    String prim = null;
    User user = null;
    int index = 0;
    //对登录与注销请求直接放行,不予拦截
    if (url.indexOf("login.action")!=-1 || url.indexOf("logout.action")!=-1){
    return ai.invoke();
    }
    else{
    //验证Session是否过期
    if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){
    //session过期,转向session过期提示页,最终跳转至登录页面
    return "tologin";
    }
    else{
    user = (User)ServletActionContext.getRequest().getSession().getAttribute("user");
    //验证是否已经登录
    if (user==null){
    //尚未登录,跳转至登录页面
    return "tologin";
    }else{
    return ai.invoke();

    }
    }
    }
    }
    }
      

  3.   


    当然要在struts.xml中给每个action配置拦截器 ?怎么配置 ..
      

  4.   

    <default-interceptor-ref name="do"></default-interceptor-ref>
    <package name="vstar-struts" extends="struts-default">
    <interceptors>
    <interceptor name="VstarBaseInterceptor" class="拦截器" />
    <interceptor name="for_do" class="com.vstar.framework.core.struts2plugin.ExtensionNameInterceptor">
      <param name="extension">.do</param>
    </interceptor>            
                <interceptor-stack name="do"> 
                    <interceptor-ref name="for_do"/> 
                    <interceptor-ref name="VstarBaseInterceptor"/> 
                </interceptor-stack> 
    </interceptors> </package>
      

  5.   


    你好 ,你知道楼上那个人写的 return ai.invoke(); 其中ai 是什么意思?? 我这里找不到、、、
      

  6.   

    public String intercept(ActionInvocation ai) throws Exception 
      

  7.   


     <param name="extension">.do</param>
    是不是应该.action啊?? 因为比如说我登陆是这样跳转的 在jsp login_System.action。.do应该是struts1的概念吧
      

  8.   

    <constant name="struts.action.extension" value="do"></constant> 可以换成do 
    习惯用do了不习惯action
      

  9.   

    那我改为action就可以了啊
    还有 ,if (user==null){
    //尚未登录,跳转至登录页面
    return "tologin";
    这个"tologin" 怎么在strutx.xml配置啊 ??? 可以用我以前跳转到login.jsp的配置吗
      

  10.   

    贴个过滤器的代码:package com.zhang.util;import java.io.IOException;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    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;
    public class FilterAll implements javax.servlet.Filter { private FilterConfig filterConfig;
    private String loginPage; public void destroy() {
    filterConfig = null;
    System.gc();
    } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    HttpSession session = req.getSession(true);
    if (((session.getAttribute("user") != null || (req.getRequestURI().endsWith("Login.jsp"))))//请求资源URL以Login.jsp   Login_Action结尾则不予拦截
    || (session.getAttribute("user") != null || (req.getRequestURI().endsWith("Login_Action")))
    || (session.getAttribute("user") != null || (req.getRequestURI().endsWith(".jpg") || req.getRequestURI().endsWith(".gif")))
    || (session.getAttribute("user") != null || req.getRequestURI().endsWith("Register.jsp"))// ||(session.getAttribute("user") != null || req.getRequestURI().endsWith("Register_Action"))
    ||(session.getAttribute("user") != null || req.getRequestURI().endsWith(".css"))
    ||(session.getAttribute("user") != null || req.getRequestURI().endsWith("Temp.jsp"))
    ) {
    System.out.println("过滤器工作...");
    chain.doFilter(request, response);
    return;
    } else if (session.getAttribute("user") == null) {    //'user'为登录时后保存的session属性名
    ServletContext ctx = filterConfig.getServletContext();
    setForwordURI(req);
    ctx.getRequestDispatcher(loginPage).forward(req, res);  }
    } public void init(FilterConfig config) throws ServletException {
    filterConfig = config;
    if (filterConfig.getInitParameter("loginPage") != null)
    loginPage = filterConfig.getInitParameter("loginPage");//'loginPa.xml中配置的参数 该参数为要跳转到的页面
    } private void setForwordURI(HttpServletRequest request) {
    StringBuffer requestURI = new StringBuffer(request.getRequestURI());
    String queryString = request.getQueryString();
    if (queryString != null) {
    requestURI.append("?").append(queryString);
    }
    request.setAttribute("orignURL", requestURI.toString());
    }}在web.xml中配置请放在struts过滤器之前:    <filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.zhang.util.FilterAll</filter-class>
      <init-param>
        <param-name>loginPage</param-name>
        <param-value>/LoginPlease.jsp</param-value>
      </init-param>
    </filter> <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>自己稍微修改下  就可以跑起来的  有问题请跟帖
      

  11.   

    也不叫声大哥,怎么是"那个人呢",哎。
    继续贴代码:<?xml version="1.0" encoding="utf-8" ?>   <!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
    <constant name="struts.i18n.encoding" value="gbk" />
    <constant name="struts.devMode" value="false" />
    <package name="struts2" namespace="/" extends="struts-default"> <interceptors> <interceptor name="loginedCheck" class="filter.LoginedCheckInterceptor" /> <interceptor-stack name="mystack"> <interceptor-ref name="loginedCheck" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <global-results> <!-- 定义名为exception的全局result --> <result name="exception">exception.jsp</result>
    <result name="input">exception.jsp</result>
    <result name="tologin">logout.jsp</result>
    </global-results> <!-- 定义全局异常映射 --> <global-exception-mappings> <!-- 捕捉到Exception异常(所有异常)时跳转到exception所命名的视图上 --> <exception-mapping exception="java.lang.Exception" result="exception" /> </global-exception-mappings> <action name="login" class="loginAction"> <result name="success">index.jsp</result> <result name="input">login.jsp</result> <result name="fail">dongle_fail.jsp</result> <interceptor-ref name="mystack" /> </action> <action name="logout" class="logoutAction"> <result name="logout">logout.jsp</result> <interceptor-ref name="mystack" /> </action> <action name="user_*" class="userAction" method="{1}"> <result name="success" type="redirect">user_query.action?groupId=${groupId}&amp;groupType=${groupType}&amp;currentPage=${currentPage}
    </result> <result name="list">jsp/UserList.jsp</result> <result name="add">jsp/UserAdd.jsp</result> <result name="update">jsp/UserEdit.jsp</result> <interceptor-ref name="mystack" /> </action>
    </package>
    </struts>   
      

  12.   

    在每个页面判断一下,如果session的值为空,则跳转到登录页面就可以了