权限操作
- 后台系统先登陆,才能操作员工: 添加/修改/删除
- 没有登陆,只能查看列表,不能操作!
我们写一个拦截器,判断是否调用登陆或者列表展示的方法,如果不是就查看该用户有没有登陆。没有登陆就跳转到登陆界面
package zhongfucheng.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; /** * Created by ozc on 2017/5/17. */ public class PrivilegeInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation actionInvocation) throws Exception { //得到ActionContext ActionContext context = actionInvocation.getInvocationContext(); //得到正在调用Action的方法名 String methodName = actionInvocation.getProxy().getMethod(); //获取session中管理员的对象 Object o = context.getSession().get("admin"); //判断正在调用什么方法 if ("login".equals(methodName) || "list".equals(methodName)) { //调用了这两个方法,不用权限,直接调用把 return actionInvocation.invoke(); } else { //如果不是,那么检查 // 没有登陆,就跳转到登陆界面呗 if (o == null) { return "login"; } else { // 有登陆,那么就可以执行呗 return actionInvocation.invoke(); } } } }
- 在Struts2配置文件中配置拦截器
<!-- 拦截器配置 --> <interceptors> <interceptor name="userInterceptor" class="cn.itcast.action.UserInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="userInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 执行指定的拦截器 --> <default-interceptor-ref name="myStack"></default-interceptor-ref>
- 拦截器返回的login需要配置全局视图
<global-results> <!--回到展示列表页面--> <result name="listPage" type="redirectAction">user_list</result> <!--拦截器返回login--> <result name="login" type="redirect">/login.jsp</result> </global-results>
- 效果:
总结
本篇主要使用SSH框架来开发一个比较简易的CRUD项目。让我们熟悉SSH框架开发的流程。
- 设计实体
- 编写每个实体的映射文件
- 把映射文件加载到Hibernate中管理起来
- 使用BaseDao来管理全部的Dao,使得每个Dao都有Curd的方法。这样就不用我们在每个Dao都写上Crud了
- 如果普通的CURD方法满足不了我们,就可以在特定的Dao中写上自己想要的功能
- Service层调用Dao层的方法
- Controller调用Service层的方法实现功能,如果页面上需要后天的数据的话,那么我们先调用service获取得到数据,然后通过域对象(值栈对象)把数据存储起来,在页面上做展示。