struts2拦截功能进行登入拦截

本文详细介绍了如何在Struts2框架中使用拦截器进行登录验证,确保只有登录用户才能访问特定资源。通过配置拦截器、判断用户会话中是否存在登录状态,实现了对未登录用户的自动跳转至登录页面的功能。

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



使用struts2拦截功能进行登入拦截,整个过程主要依赖session中是否有用户的信息;

如果没有我们就进行拦截,然后自动跳转到登入页面。


1.首先,我们创建一个拦截类,并继承AbstractInterceptor实现其方法intercept(ActionInvocation invocation);

public class FilterLogin extends AbstractInterceptor {
	
	Logger logger = Logger.getLogger(this.getClass());
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext actionContext = invocation.getInvocationContext();
        HttpServletRequest request = (HttpServletRequest) actionContext
            .get(StrutsStatics.HTTP_REQUEST);
        //获取用户session  用于判断用户是否登入
        Map<String, Object> session = actionContext.getSession();
        
        //首先判断session,查找是否登录成功,通过拦截器
        if (session != null && session.get("username") != null) {
            logger.info("通过拦截器,session中有记录[" + session.get("username") + "]");
            return invocation.invoke();
        }
        System.out.println("you no login  ");
        return "loginUI";
	}
}


2.拦截类我们已经完成,下面就是登入页面,这里我们将登入页面省略

3.配置struts.xml文件,在配置前,需要说一下,配置自定义拦截器需要继承struts默认提供的defaultStack,这样真正意义的拦截器才能生效

拦截器要放在<package>中

<!-- 自定义拦截器 -->
		<interceptors>  
            <interceptor name="loginInterceptor" class="com.mo.filter.FilterLogin" />  
            <interceptor-stack name="loginDefaultStack">  
                <interceptor-ref name="loginInterceptor" />  
                <interceptor-ref name="defaultStack" />  <!-- 一定要依赖struts2的拦截器 -->
            </interceptor-stack>  
        </interceptors>  
		<!-- 自定义默认拦截器,包括struts2默认的拦截器 -->
		<default-interceptor-ref name="loginDefaultStack" />
		<!-- 全局 -->
		 <global-results>  
            <result name="loginUI" type="redirect">user_loginUI.action</result>  
        </global-results>  

4.当然我们的登入页面是不需要被拦截的,所以我们只需要让登入部分继承struts默认的拦截器就行了

	<action name="user_*" class="userAction" method="{1}">
			<!-- 登录页面不用拦截,直接继承struts2默认的拦截器 -->
			<interceptor-ref name="defaultStack" />
			<result name="OK" type="redirectAction">music_show.action</result>
			<result name="input">/jsp/login/login.jsp</result>
		</action>

5.完成,,,,,,在这里我们要注意一点,我们拦截的只是.action的请求,对应.jsp,我们可以将jsp文件全部放到/WEB-INF/目录下,这样客户端就不能通过路径访问到jsp文件,只能通过.action跳转访问!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值