需求:用户登录才能执行action中的方法,并给出执行那一个方法,否则提示无权限操作.
1.首先定义一个action.[message作为消息提示]
public class HelloWorldAction {
//成员变量[字段]
private String message;
//属性 存取data
public String getMessage(){
return message;
}
public String execute() throws Exception{message="execute";return "success";}public String add(){message="add";return "success";}}
2.模拟用户登录以及注销.
-模拟用户登录,将用户存入session保存 -userlogin.jsp<%
request.getSession().setAttribute("user", "init");
%>
用户已登录
</pre><pre class="html" name="code">
<%request.getSession().removeAttribute("user");%>用户已注销
-以及消息提示view - message.jsp
<html>
${message}
</html>
3.定义一个拦截器
public class PermissionInterceptor implements Interceptor {
@Override
public void destroy() {}
@Override
public void init() {}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//获取用户登录后保存在session中的user
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null)
//放行
invocation.invoke();
ActionContext.getContext().put("message", "您没有权限执行该操作");
return "success";
}
}
4.struts.xml配置
<struts>
<!--修改struts的默认请求后缀 -->
<constant name="struts.action.extension" value="do,action"/>
<!-- 禁止动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<package name="base" extends="struts-default">
<!-- 全视图 -->
<global-results>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-results>
</package>
<package name="it" namespace="/control" extends="base">
<!-- 拦截器链 -->
<interceptors>
<interceptor name="permission" class="cn.it.interceptor.PermissionInterceptor"/>
<!-- 拦截器栈 -->
<interceptor-stack name="permissionStack">
<!-- 系统默认的放前面 -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="permission"/>
</interceptor-stack>
</interceptors>
<!-- 包内所有默认拦截器,当某个action显视的定义拦截器后,默认的失效 -->
<default-interceptor-ref name="permissionStack"/>
<!--权限测试 -->
<action name="permiss_*" class="cn.it.action.HelloWorldAction" method="{1}">
<!-- 调用权限拦截器 -->
<interceptor-ref name="permissionStack"/>
</action>
</package>
</struts>