Struts2中使用拦截器 Interceptor 登陆权限验证
Struts2 拦截器的使用,验证是否已经登陆。
第一步:编写拦截器类,继承AbstructInterceptor 重新Intercept()。
1.调用下一个拦截器或action之前做了什么。
2.调用下一个拦截器或者action。
3.调用拦截器或action之后做了什么。
代码:
public class LoginInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String result = "";
System.out.println("before invoke");
//因为要把这个拦截器设置成默认拦截器,所以如果是登陆的action则跳过。
if(MyAction.class==invocation.getAction().getClass()){
return invocation.invoke();
}
//取session中的username,如果等于null则没有登陆,返回input跳转到登陆页面
if(ServletActionContext.getRequest().getSession().getAttribute("username")==null){
return "input";
}
result = invocation.invoke();
System.out.println("after invoke");
return result;
}
第二步:在struts.xml中定义拦截器。
<interceptors> <interceptor name="loginInterceptor" class="com.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="loginInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors>
设置成默认的拦截器
<default-interceptor-ref name="myStack"></default-interceptor-ref>
如果不需要设置成默认拦截器,则在具体的action中配置
<action name="login" class="com.action.LoginAction"> <interceptor-ref name="myStack"></interceptor-ref> ......
登陆提交到的action里的login()
public String login() throws Exception {
String target = "";
if(username.equals("hsp")&&password.equals("hsp")){
target = "success";
this.getSession().setAttribute("username", username);
}
else{
target = "input";
}
return target;
}
login.jsp代码
<body> <h2>登录</h2> <form action="myAction!login.action" method="post"> username:<input type="text" name="username"/><br/> password:<input type="password" name="password"/><br/> <input type="submit" value="login"><br/> </form> </body>
struts.xml代码
<action name="myAction" class="com.action.MyAction"> <result name="success" type="redirectAction">welcom</result> </action> <action name="welcom"> <result>welcom.jsp</result> </action>
当用户正确登陆后跳转到welcom.action。复制url再把浏览器关闭。重新打开浏览器,请求复制的url。拦截器会起作用,让页面跳转的登陆页面。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
