最近在学习struts2的拦截器,做了一个小例子:
首先写一个登录页面login.jsp
<body>
<s:form action="login" method="post">
<s:textfield name="username" label = "用户名"/>
<s:password name="pass" label="密码" />
<s:submit value="提交" />
</s:form>
</body>
再写LoginAction:
private String username;
private String pass;
和两变量的set、get方法
public String execute() throws Exception {
// TODO Auto-generated method stub
if(isNull(getUsername())) return INPUT;
if(isNull(getPass())) return INPUT;
ActionContext.getContext().getSession().put("user",getUsername());
ActionContext.getContext().getSession().put("pass", getPass());
return SUCCESS;
}
private boolean isNull(String str) {
return str==null||str.length()==0;
}
拦截器LoginInterceptor:
public String intercept(ActionInvocation ai) throws Exception {
// TODO Auto-generated method stub
Map session = ai.getInvocationContext().getSession();
String username = (String)session.get("user");
String pass = (String)session.get("pass");
if(username!=null&&username.length()>0&&pass!=null){
return ai.invoke();
}else{
return Action.LOGIN;
}
}
最后配置struts.xml:
<struts>
<package name="struts2" extends="struts-default">
<!-- 配置自定义拦截器LoginInterceptor -->
<interceptors>
<interceptor name="loginedCheck"
class="com.struts2.interceptor.LoginInterceptor" />
<interceptor-stack name="mystack">
<interceptor-ref name="loginedCheck" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 定义全局result -->
<global-results>
<!-- 定义名为exception的全局result -->
<result name="exception">/exception.jsp</result>
<result name="tologin" type="redirect">
/login.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="input">/login.jsp</result>
<result name="error">/login.jsp</result>
<result name="success" type="redirect">/index.jsp</result>
</action>
<action name="logout" class="com.struts2.action.LoginAction">
<result name="success" type="redirect">/login.jsp</result>
</action>
<!-- 系统用户信息管理 -->
<action name="listSystemUser" class="systemUserAction"
method="listSystemUser">
<result name="success">/list.jsp</result>
<interceptor-ref name="mystack" />
</action>
</package>
</struts>