Struts2拦截器interceptor控制登录和访问权限 struts2 interceptor

Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultStack。因为登录和访问权限拦截是全局的,拦截返回的结果有些也是全局的,所以我定义了自己的package以便引用。我是这样写的:

==================================================================================================

<packagename="struts-my"extends="struts-default">

<interceptors>
<!--判断是否登录和是否有访问权限-->
<interceptorname="auth"/>
<interceptor-stackname="myStack">
<interceptor-refname="auth"></interceptor-ref>
<interceptor-refname="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>

<default-interceptor-refname="myStack"></default-interceptor-ref>
Struts2拦截器interceptor控制登录和访问权限 struts2 interceptor
<!--全局结果-->
<global-results>
<!--拦截没登录返回结果 -->
<resultname="noLogin"type="redirect">/jsp/no_login.jsp</result>
<!--拦截没有权限返回结果 -->
<resultname="noPower"type="redirect">/jsp/no_power.jsp</result>
</global-results>
</package>

<package name="default"extends="struts-my">
<!--登录登出不需要拦截让它们已入defaultStack-->
<actionname="login"method="login">
<resultname="input">/jsp/login.jsp</result>
<resultname="success"type="redirect">/jsp/index.jsp</result>
<interceptor-refname="defaultStack"></interceptor-ref>
</action>

<actionname="logout"method="logout">
<resultname="success">/jsp/login.jsp</result>
<interceptor-refname="defaultStack"></interceptor-ref>
</action>

。。。。。。。。。

==================================================================================================

需要说明的是,登录和登出是不需要拦截的(或者其它不需要拦截的),我们让它们的拦截器继承defaultStack。局部权限高于全局定义的,它们的拦截器栈就是默认的,不是自定义的。

还有一点要说明的是我,我拦截器的名字auth引用的类是在Spring里面配置的一个bean,我用的是SSH,在类里面我用到了一些数据库的东西,我需要在Spring里注入。如果不需要可以直接写用到的类(要写路径)。

在登陆成功后,我把“user”放到了session中,我还有一张权限表,里面存的是权限组id和访问的权限。用户表里存放权限组id,这样就可以知道用户有什么权限了。我实现拦截的类是这样写的。

==================================================================================================

public class AuthenticationInterceptor extendsAbstractInterceptor{

//这个是需要用到的自定义的方法。

private GroupPowerService groupPowerService;

public String intercept(ActionInvocation invocation) throwsException {

Map map=invocation.getInvocationContext().getSession();

if(map.get("user")==null)
{
return"noLogin";
}
else
{
//得到用户的权限id和 访问的类名
intid = ((User)map.get("user")).getGroupId();
//拦截的action的名字
Stringaction =invocation.getInvocationContext().getName();

//通过用户id和拦截的action名判断用户是否有这个权限
if(this.groupPowerService.hasPower(id,action))
//继续执行不拦截
returninvocation.invoke();

return"noPower";
}
}

public GroupPowerService getGroupPowerService() {
returngroupPowerService;
}

==================================================================================================

还有两个jsp页面和一个在Spring的配置文件里的一句话(这里拦截器和action一样,用到什么sevice用注入什么)就没什么可说的了。

转载两篇比较好的文章:

struts2,登录功能模块实现

浅谈Struts2拦截器的原理与实现

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/36786.html

更多阅读

如何开启360广告拦截器 360浏览器广告拦截器

现在广告到处都是,如软件广告,网页广告等等,今天我就来教各位如何启动360广告拦截器,来帮助您拦截广告。首先 启动 360杀毒软件选择“功能大全”选择“广告拦击”开启广告拦击

ipv6无网络访问权限怎么办 ipv4 ipv6无网络权限

ipv6无网络访问权限怎么办——简介有时IP4和IP6都正常连接,但突然又出现“IPV6无网络访问权限” 这是Win7系统下经常发生的事情,如下图。ipv6无网络访问权限怎么办——方法/步骤

怎样设置QQ空间的访问权限 qq空间访问权限破解器

有时候您可能不喜欢别人访问你的QQ空间,或是指定的人看,再者喜欢自己一个人分享,出现这些情况的时候该怎么办。怎样设置QQ空间的访问权限——步骤/方法怎样设置QQ空间的访问权限 1、登录QQ空

怎么破解qq空间访问权限 下载qq空间破解器

怎么破解qq空间访问权限——简介QQ空间来记录自己的心情,保存自己的照片和视频,如果不想让其他人进入自己QQ空间查看自己的日志和照片,我们就可以加密QQ空间,就是在QQ空间上设置权限或密码,只有有权限或知道密码的网友才能查看自己的QQ

声明:《Struts2拦截器interceptor控制登录和访问权限 struts2 interceptor》为网友你与氧共存分享!如侵犯到您的合法权益请联系我们删除