如何实现用STRUTS2的拦截器实现不同权限登录不同界面
是这样的,一个用SSH实现的系统,实现这样的权限,比如:普通用户登录,可以看到A,B,C三个模块功能,管理员用户登录可以看到A,B,C,D,E五个模块功能,会员用户登录可...
是这样的,一个用SSH实现的系统,实现这样的权限,比如:普通用户登录,可以看到A,B,C三个模块功能,管理员用户登录可以看到A,B,C,D,E五个模块功能,会员用户登录可以看到A,B,C,E四个模块功能,用STRUTS2的拦截器如何实现啊,求教高手出现,最好写些代码,谢谢
展开
4个回答
展开全部
<!-- 只有admin 用户才能访问的action -->
<package name="onlyadmin" extends="struts-default">
<interceptors>
<!--定义一个名为admin的拦截器-->
<interceptor class="edu.cuit.course.interceptor.AdminInterceptor"
name="admin" />
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stack name="adminInterceptor">
<!--配置内建默认拦截器-->
<interceptor-ref name="defaultStack" />
<!--配置自定义的拦截器-->
<interceptor-ref name="admin">
<param name="excludeMethods">list</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="adminInterceptor" />
<global-results>
<result name="login">/user/userLogin.jsp</result>
</global-results>
<action name="admin" class="edu.cuit.course.action.AdminAction">
</action>
<action name="module" class="edu.cuit.course.action.ModuleAction">
<result name="addModule">/module/moduleadd.jsp</result>
<result name="addSuccess">/module/suc.jsp</result>
<result name="listByPageSuccess">/page/modulelist.jsp</result>
<result name="update">/module/moduleupdate.jsp</result>
<result name="updateSuccess">/module/suc.jsp</result>
</action>
</package>
<!-- 只有登录用户才能访问的action -->
<package name="onlyuser" extends="struts-default" namespace="/">
<interceptors>
<!--定义一个拦截器-->
<interceptor class="edu.cuit.course.interceptor.UserInterceptor"
name="user" />
<!-- 管理员拦截器 -->
<interceptor class="edu.cuit.course.interceptor.AdminInterceptor"
name="admin" />
<!-- 系统用户拦截器 -->
<interceptor class="edu.cuit.course.interceptor.SystemInterceptor"
name="system" />
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stack name="userInterceptor">
<!--配置内建默认拦截器-->
<!--配置自定义的拦截器-->
<interceptor-ref name="user">
<param name="excludeMethods">show</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="adminInterceptor">
<!--配置内建默认拦截器-->
<interceptor-ref name="defaultStack" />
<!--配置自定义的拦截器-->
<interceptor-ref name="admin">
<param name="excludeMethods">report,listByArticle,add,addInput</param>
</interceptor-ref>
<interceptor-ref name="user">
<param name="excludeMethods">report,listByArticle</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="userInterceptor" />
<global-results>
<result name="login">/user/userLogin.jsp</result>
<result name="error">/error.jsp</result>
<result name="index">/index.jsp</result>
</global-results>
<action name="userInfo" class="edu.cuit.course.action.UserInfoAction">
<result name="verifySuccess">/index.jsp</result>
<result name="verify">/user/verify.jsp</result>
<result name="updateUser">/user/update.jsp</result>
<result name="rePassword">/user/newPassword.jsp</result>
<result name="rePasswordSuccess">/user/suc.jsp</result>
<result name="seeData">/user/userInfo.jsp</result>
</action>
<action name="fileUpload" class="edu.cuit.course.action.FileUploadAction">
<interceptor-ref name="fileUpload">
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="input">/fileupload/fileupload.jsp</result>
<result name="uploadInput">/fileupload/fileupload.jsp</result>
<result name="success">/fileupload/upload_success.jsp</result>
</action>
<action name="notice" class="edu.cuit.course.action.NoticeAction">
<result name="addNotice">/notice/noticeadd.jsp</result>
<result name="addSuccess">/system/suc.jsp</result>
<result name="deleteSuccess">/system/suc.jsp</result>
<result name="update">/notice/noticeupdate.jsp</result>
<result name="getNoticeListSuccess">/system/manageSysNotice.jsp</result>
</action>
<action name="article" class="edu.cuit.course.action.ArticleAction">
<result name="showArticle">/article/showArticle.jsp</result>
<result name="addarticle">/article/testArticle.jsp</result>
<result name="success">/article/suc.jsp</result>
<result name="addSuccess">/article/suc.jsp</result>
<result name="listByPageSuccess">/page/articlelist.jsp</result>
</action>
<action name="message" class="edu.cuit.course.action.MessageAction">
<interceptor-ref name="adminInterceptor"></interceptor-ref>
<result name="reviewSuccess">/system/suc.jsp</result>
<result name="addSuccess">/system/suc.jsp</result>
<result name="addMessage">/message/addmessage.jsp</result>
<result name="reviewSuccess">/system/suc.jsp</result>
<result name="listByPageSuccess">/admin/msgmanage.jsp</result>
<result name="listArticleMessages">/page/messagelist.jsp</result>
<result name="reportSuccess">/system/suc.jsp</result>
</action>
<action name="fileDownload" class="edu.cuit.course.action.FileDownloadAction">
<result type="stream">
<param name="contentType">application/octet-stream;charset=UFT-8</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
<action name="file" class="edu.cuit.course.action.FileAction">
<result name="deleteSuccess">/system/suc.jsp</result>
</action>
</package>
拦截器的配置:
admin拦截器:
package edu.cuit.course.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import edu.cuit.course.pojo.User;
public class AdminInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -4390311642665624081L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = invocation.getInvocationContext();
Map<String ,Object> session = ctx.getSession();
User user = (User) session.get("user");
if (user == null) {
ctx.put("loginTip", "你还没有登录");
return Action.LOGIN;
} else {
if (!user.getType().equals("admin")) {
ctx.put("tip", "没有权限进行此操作");
return Action.LOGIN;
}
}
return invocation.invoke();
}
}
应该差不多了,还有个system 的拦截器,差不多的结构。。要知道 你提交请求的时候,先叫由web。xml然后通过过滤器一层一层到 拦截器,也就是在你的逻辑前加一些 验证的东西,系统的拦截器有很多, invocation.invoke()就是一层一层去 触发拦截器,当系统 的拦截器和 自定义的拦截器 都通过了的时候 才回访问你的 逻辑 action 或者方法,这个叫做aop编程 。面向切面编程。
<package name="onlyadmin" extends="struts-default">
<interceptors>
<!--定义一个名为admin的拦截器-->
<interceptor class="edu.cuit.course.interceptor.AdminInterceptor"
name="admin" />
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stack name="adminInterceptor">
<!--配置内建默认拦截器-->
<interceptor-ref name="defaultStack" />
<!--配置自定义的拦截器-->
<interceptor-ref name="admin">
<param name="excludeMethods">list</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="adminInterceptor" />
<global-results>
<result name="login">/user/userLogin.jsp</result>
</global-results>
<action name="admin" class="edu.cuit.course.action.AdminAction">
</action>
<action name="module" class="edu.cuit.course.action.ModuleAction">
<result name="addModule">/module/moduleadd.jsp</result>
<result name="addSuccess">/module/suc.jsp</result>
<result name="listByPageSuccess">/page/modulelist.jsp</result>
<result name="update">/module/moduleupdate.jsp</result>
<result name="updateSuccess">/module/suc.jsp</result>
</action>
</package>
<!-- 只有登录用户才能访问的action -->
<package name="onlyuser" extends="struts-default" namespace="/">
<interceptors>
<!--定义一个拦截器-->
<interceptor class="edu.cuit.course.interceptor.UserInterceptor"
name="user" />
<!-- 管理员拦截器 -->
<interceptor class="edu.cuit.course.interceptor.AdminInterceptor"
name="admin" />
<!-- 系统用户拦截器 -->
<interceptor class="edu.cuit.course.interceptor.SystemInterceptor"
name="system" />
<!--定义一个包含权限检查的拦截器栈-->
<interceptor-stack name="userInterceptor">
<!--配置内建默认拦截器-->
<!--配置自定义的拦截器-->
<interceptor-ref name="user">
<param name="excludeMethods">show</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
<interceptor-stack name="adminInterceptor">
<!--配置内建默认拦截器-->
<interceptor-ref name="defaultStack" />
<!--配置自定义的拦截器-->
<interceptor-ref name="admin">
<param name="excludeMethods">report,listByArticle,add,addInput</param>
</interceptor-ref>
<interceptor-ref name="user">
<param name="excludeMethods">report,listByArticle</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="userInterceptor" />
<global-results>
<result name="login">/user/userLogin.jsp</result>
<result name="error">/error.jsp</result>
<result name="index">/index.jsp</result>
</global-results>
<action name="userInfo" class="edu.cuit.course.action.UserInfoAction">
<result name="verifySuccess">/index.jsp</result>
<result name="verify">/user/verify.jsp</result>
<result name="updateUser">/user/update.jsp</result>
<result name="rePassword">/user/newPassword.jsp</result>
<result name="rePasswordSuccess">/user/suc.jsp</result>
<result name="seeData">/user/userInfo.jsp</result>
</action>
<action name="fileUpload" class="edu.cuit.course.action.FileUploadAction">
<interceptor-ref name="fileUpload">
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="input">/fileupload/fileupload.jsp</result>
<result name="uploadInput">/fileupload/fileupload.jsp</result>
<result name="success">/fileupload/upload_success.jsp</result>
</action>
<action name="notice" class="edu.cuit.course.action.NoticeAction">
<result name="addNotice">/notice/noticeadd.jsp</result>
<result name="addSuccess">/system/suc.jsp</result>
<result name="deleteSuccess">/system/suc.jsp</result>
<result name="update">/notice/noticeupdate.jsp</result>
<result name="getNoticeListSuccess">/system/manageSysNotice.jsp</result>
</action>
<action name="article" class="edu.cuit.course.action.ArticleAction">
<result name="showArticle">/article/showArticle.jsp</result>
<result name="addarticle">/article/testArticle.jsp</result>
<result name="success">/article/suc.jsp</result>
<result name="addSuccess">/article/suc.jsp</result>
<result name="listByPageSuccess">/page/articlelist.jsp</result>
</action>
<action name="message" class="edu.cuit.course.action.MessageAction">
<interceptor-ref name="adminInterceptor"></interceptor-ref>
<result name="reviewSuccess">/system/suc.jsp</result>
<result name="addSuccess">/system/suc.jsp</result>
<result name="addMessage">/message/addmessage.jsp</result>
<result name="reviewSuccess">/system/suc.jsp</result>
<result name="listByPageSuccess">/admin/msgmanage.jsp</result>
<result name="listArticleMessages">/page/messagelist.jsp</result>
<result name="reportSuccess">/system/suc.jsp</result>
</action>
<action name="fileDownload" class="edu.cuit.course.action.FileDownloadAction">
<result type="stream">
<param name="contentType">application/octet-stream;charset=UFT-8</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
<action name="file" class="edu.cuit.course.action.FileAction">
<result name="deleteSuccess">/system/suc.jsp</result>
</action>
</package>
拦截器的配置:
admin拦截器:
package edu.cuit.course.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import edu.cuit.course.pojo.User;
public class AdminInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -4390311642665624081L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
ActionContext ctx = invocation.getInvocationContext();
Map<String ,Object> session = ctx.getSession();
User user = (User) session.get("user");
if (user == null) {
ctx.put("loginTip", "你还没有登录");
return Action.LOGIN;
} else {
if (!user.getType().equals("admin")) {
ctx.put("tip", "没有权限进行此操作");
return Action.LOGIN;
}
}
return invocation.invoke();
}
}
应该差不多了,还有个system 的拦截器,差不多的结构。。要知道 你提交请求的时候,先叫由web。xml然后通过过滤器一层一层到 拦截器,也就是在你的逻辑前加一些 验证的东西,系统的拦截器有很多, invocation.invoke()就是一层一层去 触发拦截器,当系统 的拦截器和 自定义的拦截器 都通过了的时候 才回访问你的 逻辑 action 或者方法,这个叫做aop编程 。面向切面编程。
深圳市容大彩晶科技有限公司
2024-11-15 广告
2024-11-15 广告
广告机代理优选容大彩晶,深圳市容大彩晶科技有限公司自2007年成立伊始,一直专注于液晶商用显示产品的技术研发及产品服务。公司依托具有自主研发能力、创新高效的技术团队,打造出行业优质商用液晶显示设备。容大彩晶产品涵盖商用液晶显示、多媒体广告机...
点击进入详情页
本回答由深圳市容大彩晶科技有限公司提供
展开全部
在数据库中做好角色表,资源表和角色-资源对应表,在第三张表中记录了某角色可以访问的菜单。在拦截器中查询这个角色-资源对应表,就知道了当前这个角色能访问的所有菜单了。当然只有第一次使用这个拦截器时才需要查询,查询出来后应该放到session变量中,以后每次请求都知道这个角色对应的菜单了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你直接用什么都能实现的,登陆成功不就是在execute(){}方法中吗,成功的时候用户是放在session中的吧,那还不简单了呀。在前面也可以访问到session只的值咯。各种if()判断就行了,so....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得拦截器做权限控制就好
显示模块这些放在程序里面,
有个安全框架apache shiro据说挺不错,我正在看
显示模块这些放在程序里面,
有个安全框架apache shiro据说挺不错,我正在看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询