需求:访问index.jsp页面需要登陆,该页面是由IndexAction来转发!故使用拦截器拦截来拦截IndexAction,判断session域中是否有user,有就正常访问,没有就跳转到登陆页面!
如果不适用拦截器,可以直接在地址栏中输入http://localhost/logindemo/indexAction_index.action,为了控制在没有登陆的情况下,不能访问index.jsp,所以需要使用拦截器。
1.login.jsp
<form action=" ${pageContext.request.contextPath}/loginAction_login.action" method= "post">
用户名:
<input type= "text" name ="username"/>
密码:
<input type= "password" name ="password"/>
<
input
type="submit" value= "提交">
</form >
|
2.LoginAction
public
class LoginAction extends ActionSupport {
public
String login(){
String username=ServletActionContext.getRequest().getParameter(
"username");
String password=ServletActionContext.getRequest().getParameter(
"password");
User user=
new User();
user.setPassword(password);
user.setUsername(username);
ServletActionContext. getRequest().getSession().setAttribute(
"user"
, user);
System.
out.println("login........" );
return SUCCESS ;
}
}
|
3.IndexAction:
public
class IndexAction extends ActionSupport {
public
String index(){
return "index" ;
}
}
|
4.struts.xml:
将loginAction和indexAction分别放于两个包中,indexAction的package继承具有拦截器的aa包,拦截器对在包内的action起作用,对其他的不起作用!
<?
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="aa" namespace="/" extends="struts-default" >
<interceptors>
<interceptor name= "loginInterceptor" class="com.oterman.interceptor.LoginInterceptor" >
</interceptor>
<interceptor-stack name="myInterceptorStack" >
<interceptor-ref name="loginInterceptor" ></interceptor-ref>
<interceptor-ref name="defaultStack" ></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myInterceptorStack" ></default-interceptor-ref>
</
package
>
<!-- 访问loginAction时,不用拦截 -->
<
package
name="login" namespace="/" extends="struts-default" >
<action name= "loginAction_*" method ="{1}"
class= "com.oterman.struts.action.LoginAction" >
<result type= "redirectAction" >indexAction_index.action</ result>
</action>
</
package
>
<!-- 访问index.jsp时,需要拦截,故需要继承声明拦截器的包 -->
<
package
name="index" namespace="/" extends="aa">
<action name= "indexAction_*" method ="{1}" class="com.oterman.struts.action.IndexAction" >
<result name="index" >/login/index.jsp </result>
<result name="login" >/login/login.jsp </result>
</action>
</
package
>
</
struts
>
|