这段时间做到了权限处理部分,想用struts2的拦截器处理. 但看了不少技术资源,还是有点晕,得请教大家的经验.谢谢.给代码或说明下它的重点,或者说下它,先做什么,后做什么,然后再做什么?

解决方案 »

  1.   

    actionpackage com.lil.test_ch10_03.action;import java.util.Map;import com.opensymphony.xwork2.ActionSupport;
    import org.apache.struts2.interceptor.SessionAware;import com.lil.test_ch10_03.model.User;public class LoginAction extends ActionSupport implements SessionAware {
    private User user;
    private Map session;

    public User getUser() {
    return user;
    }

    public void setUser(User user) {
    this.user=user;
    }

    public void setSession(Map session) {
    this.session=session;
    }

    public String input() throws Exception {
    return INPUT;
    }

    public String execute() throws Exception {
    if("zhangsan".equals(user.getUsername()) && "123".equals(user.getPassword())) {
    session.put("user", user);
    } else {
    addActionError("login failed");
    return INPUT;
    }

    return SUCCESS;
    }
    }
    interceptorpackage com.lil.test_ch10_03.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class AuthenticationInterceptor extends AbstractInterceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
    ActionContext ctx=ActionContext.getContext();
    Map session=ctx.getSession();
    Object user=session.get("user");

    if(user==null) {
    ActionSupport action=(ActionSupport)invocation.getAction();
    action.addActionError("you have to login");

    return Action.LOGIN;
    }

    return invocation.invoke();
    }
    }
    entitypackage com.lil.test_ch10_03.model;import java.io.Serializable;public class User implements Serializable {
    private String username;
    private String password;

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username=username;
    }

    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {
    this.password=password;
    }
    }
    struts.xml<?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>
    <package name="default" extends="struts-default">
    <interceptors>
    <interceptor name="auth" class="com.lil.test_ch10_03.interceptor.AuthenticationInterceptor" />

    <interceptor-stack name="securityStack">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="auth" />
    </interceptor-stack>
    </interceptors>

    <global-results>
    <result name="login">/WEB-INF/pages/login.jsp</result>
    </global-results>

    <action name="login" class="com.lil.test_ch10_03.action.LoginAction">
    <result>/WEB-INF/pages/success.jsp</result>
    <result name="input">/WEB-INF/pages/login.jsp</result>
    </action>

    <action name="resource">
    <result>/WEB-INF/page/resource.jsp</result>

    <interceptor-ref name="securityStack" />
    </action>
    </package>
    </struts>
    web-inf/pages/
    login.jsp<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
        <s:form action="login">
         <s:actionerror />
         <s:textfield name="user.username" label="Username" />
         <s:password name="user.password" label="Password" />
         <s:submit label="Submit" />
        </s:form>
    resource.jsp<%@ page language="java" contentType="text/html;charset=UTF-8" %>
    this is a test.
    success.jsp<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    success
      

  2.   

    使用方式,直接输入:xxxxxxxxxxxxxxxxx/resource.action
    你就可以看到效果了。
      

  3.   

           <global-results>
                <result name="login">/WEB-INF/pages/login.jsp</result>
            </global-results>这块的意思是?
      

  4.   

    description The server encountered an internal error () that prevented it from fulfilling this request.exception There is no Action mapped for namespace / and action name resource. - [unknown location]
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:494)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.异常信息.....
      

  5.   

    呃我晕
    你要么是没配对,要么是访问路径不对,http://localhost:8000/test_ch10_03/resource.action
    设globalresult的意思就是
    设置一个默认的返回结果,在不在action里覆盖这个默认结果看你自己意愿
      

  6.   

            <action name="resource">
                <result>/WEB-INF/page/resource.jsp</result>
                
                <interceptor-ref name="securityStack" />
            </action>
    "/WEB-INF/page/"这里少写了一个"s"
    应为"/WEB-INF/pages/",不好意思
      

  7.   

    定义个全局结果,当LOGIN情况下跳转到某某某static String ERROR 
              The action execution was a failure. 
    static String INPUT 
              The action execution require more input in order to succeed. 
    static String LOGIN 
              The action could not execute, since the user most was not logged in. 
    static String NONE 
              The action execution was successful but do not show a view. 
    static String SUCCESS 
              The action execution was successful 这是API中的解释,这是常用的几种情况,当然自己也可以定义
    LOGIN的情况就指的用户没有登陆的情况下,一般就会跳转到你自定义的登陆页了