Struts2利用拦截器实现权限控制

本文介绍如何在Struts2框架中实现简单的权限控制,通过自定义拦截器CheckInterceptor验证用户登录状态,未登录用户将被重定向至登录页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

权限控制,顾名思义就是对于某些页面或者操作需要满足一定的权限要求才能继续继续进行。比如说:后台管理需要管理员登录,用户密码修改等操作需要用户登录等等。在Struts2中,简单的权限控制可以通过配置拦截器即可。下面我以修改密码进行举例:

(1)定义拦截器CheckInterceptor.java用于验证用户是否登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.zxpm.interceptor;import java.util.Map;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;import com.zxpm.entity.Users;public class CheckInterceptor implements Interceptor {
    public String intercept(ActionInvocation arg0) throws Exception {
        Map<String, Object> session = arg0.getInvocationContext().getSession();
        Users u = (Users) session.get("user");
        if(u != null)
            return arg0.invoke();
        else 
            return "login";
    }
     
    public void destroy() {
        // TODO Auto-generated method stub
 
    }
 
    public void init() {
        // TODO Auto-generated method stub
 
    }}

(2)配置struts.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<package name="user" namespace="/user" extends="struts-default">
        <interceptors>
            <!-- 声明拦截器 -->
            <interceptor name="loginInterceptor" class="com.zxpm.interceptor.CheckInterceptor" />
            <interceptor name="errorInterceptor" class="com.zxpm.interceptor.ErrorInterceptor" />
            <!-- 配置拦截器栈 -->
            <interceptor-stack name="myErrorInterceptor">
                <interceptor-ref name="defaultStack" />    
                <interceptor-ref name="errorInterceptor" />
            </interceptor-stack>
        </interceptors>
        <!-- 覆盖底层的拦截器栈 对包中的所有action都有效 -->
        <default-interceptor-ref name="myErrorInterceptor" />
        <global-results>
            <result name="errorMsg">/error.jsp</result>
        </global-results>
        <global-exception-mappings>
            <exception-mapping result="errorMsg" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>
        <action name="modifyPwd" class="user" method="modifyPassword">
            <result type="redirect">/index.jsp</result>
            <result name="login" type="redirect">/index.jsp</result>
            <interceptor-ref name="loginInterceptor" />
            <interceptor-ref name="defaultStack" />
        </action>
    </package>

注:i)由于这里定义了关于异常的拦截器,因此代码显得稍多,实际上就是申明拦截器,然后在action中添加interceptor-ref即可;ii)我这个小项目因为登录操作在首页,因此直接就重定向到首页去了



本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1741570,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值