0 0

struts2捕捉登录拦截器抛出的异常无法跳转到登录页面15

正在用SSH2做个小项目,遇到个问题暂时无法解决,即:所配置的登录拦截器抛出异常,利用struts2的异常捕捉映射到指定页面(如登录页面),结果不跳转,只是打印出异常信息页面。具体如下:
1.登录拦截器
主要功能:当调用Action中inintAdd()或add(),modify()方法前检验是否已经登录,没登陆则抛出异常,跳转到登陆页面,代码如下:
public class LoginInterceptor  implements MethodBeforeAdvice   {
	public void before(Method method, Object[] args, Object instance)
			throws Throwable {
		boolean needsCheck = false;
//		HttpServletRequest request = (HttpServletRequest)instance.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		 if (instance instanceof CategoryAction
				|| instance instanceof BoardAction
				) {
			if ("initAdd".equals(method.getName())
					|| "add".equals(method.getName())
					|| "modify".equals(method.getName())) {

				needsCheck = true;
			}
		}
		if (needsCheck && session.getAttribute("id") == null && session.getAttribute("account") == null)
			throw new AccountException("您还没有登录");
//		throw new SQLException("用户名不正确");
		request.setAttribute("message", "您还没有登录,请先登录!");

	}
}


注:此拦截器已在spring配置文件中配置2.struts.xml配置
<struts>
	<!-- 由spring生成Action对象 -->
	<constant name="struts.objectFactory" value="spring" />
	<package name="main" extends="struts-default">
       
        <global-results>
            <result name="login">/form/login.jsp</result>
        </global-results>
	    <global-exception-mappings> 
            <exception-mapping result="login" exception="javax.security.auth.login.AccountException"/> 
        </global-exception-mappings> 
		<action name="*_*" class="com.vimagine.forum.action.{2}Action" method="{1}">
			<param name="action">{1}</param>
			<result name="{1}">/form/{1}{2}.jsp</result>
			<result name="login">/form/login.jsp</result>	
			<result name="all">/exception.jsp</result>	
			<result name="message">/message.jsp</result>	
		</action>
	</package>
</struts>


3.程序运行结果
当struts.xml按照以上配置时,拦截器抛出异常后不跳转到login.jsp,只是打印异常信息的页面,改为抛出SQLExcetion也不行,把上面的全局异常配置为局部异常也不行;奇怪的是当把<exception-mapping>中 exception字段改为空" "或者“java.lang.Exception”或“java.lang.RuntimeException” 就能跳转了,在局部异常中改也行。这个不知咋回事,为什么对AccountException,SQLExcetion等具体的Exception不能识别,只能捕捉比较笼统的异常类型,这个问题不知怎么解决。
2013年9月06日 10:17
目前还没有答案

相关推荐

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    8. `ResultInterceptor`: 在Action执行完成后,这个拦截器会处理返回的结果,如渲染视图、跳转到其他页面等。 9. `ChainDispatcher`: 尽管不是传统意义上的拦截器,但它是Struts2处理请求的核心组件。它负责调度...

    难经3:Struts2,拦截器拦不住Result?

    3. **异常处理**:当Action执行抛出异常时,Struts2默认会跳过剩余的拦截器并执行相应的异常Result。如果拦截器处理不当,可能会导致预期的Result无法执行。 4. **ActionInvocation**:`ActionInvocation`是Struts2...

    struts2自定义拦截器

    在Action类中,我们需要定义一个表示“无权限”的结果,这样当拦截器返回这个结果时,Struts2会根据配置跳转到相应的页面。例如: ```java public class LoginAction { // ... public String execute() { // ....

    struts2内置拦截器简介

    当某个Action抛出异常时,如果配置了此拦截器,则会跳转到配置的错误页面,通常用于显示友好的错误信息。 ##### 2.2 ServletConfig 这个拦截器允许Action直接访问Servlet API,比如`HttpServletRequest`和`...

    struts2中的拦截器

    3. **Exception拦截器**:处理Action抛出的异常,提供统一的异常处理方式。 4. **Validation拦截器**:根据Action的验证规则进行验证,如果验证失败则不执行Action。 5. **StackTrace拦截器**:在发生异常时,打印...

    Struts2拦截器例子

    本例子主要探讨了如何使用Struts2拦截器实现登录拦截,确保用户在没有正确登录的情况下无法访问受保护的页面。 首先,我们需要理解Struts2拦截器的工作原理。拦截器是基于Java的动态代理机制实现的,它们形成一个...

    Struts2 异常处理的四种获取属性方法

    在这个例子中,如果`MyAction`抛出`RuntimeException`,将直接跳转到`error.jsp`页面。 3. **自定义拦截器处理异常(Custom Interceptor for Exception Handling)** Struts2的拦截器机制允许开发者创建自定义...

    Struts2内置拦截器简介

    - **功能**:用于捕捉Action抛出的异常,并根据异常类型跳转到不同的结果页面。这是一种非常实用的异常处理机制,可以避免在每个Action中重复编写异常处理代码。 11. **File Upload (文件上传)** - **说明**:...

    Struts2中实现页面的跳转

    4. **Struts2拦截器**:Struts2的拦截器可能会影响页面跳转,特别是处理异常的拦截器。确保这些拦截器不会阻止正常的页面转发。 5. **JSP语法**:`&lt;jsp:forward page="..."/&gt;`标签的`page`属性应指向JSP页面的URL,...

    Struts2默认拦截器解析.pdf

    10. **exception**:异常映射拦截器,处理Action执行抛出的异常,并将其映射到特定的结果页面。 11. **fileUpload**:文件上传拦截器,处理HTTP多部分请求,支持文件上传。 12. **i18n**:国际化拦截器,处理请求...

    struts2登录程序源码

    Struts2允许通过`ExceptionMapping`配置来处理程序中抛出的异常,例如,当用户尝试用无效的凭据登录时,可以捕获并显示自定义错误消息。 9. **国际化与本地化**: 对于多语言支持,Struts2提供了资源包(`....

    java Struts2 在拦截器里的跳转问题

    当Struts2尝试在拦截器中调用`sendError()`时,如果响应已经被发送,那么就会抛出这个异常。 Struts2的Dispatcher在处理请求时,会先执行所有的拦截器链,然后执行相应的Action。在Action执行完毕后,Dispatcher会...

    struts2实现权限拦截.rar

    如果用户无权访问,可以抛出异常或者返回一个特定的结果,导致Struts2跳转到错误页面。 4. **异常处理**: 为了处理权限验证失败的情况,你可能需要配置一个全局异常处理结果,比如`exception`或`login`,这样当...

    Struts2异常处理机制

    在Struts2框架中,异常处理主要依赖于两个关键组件:`ExceptionMappingInterceptor`(异常映射拦截器)和`ActionError`。当一个Action执行过程中抛出未捕获的异常时,`ExceptionMappingInterceptor`会介入并根据配置...

    自定义拦截器,当输入为指定的用户名和密码的时候允许登录,否则返回登录页面进行登录。

    如果不匹配,可以抛出异常或者设置一个错误代码,由Struts框架处理并重定向到登录页面。 3. **配置拦截器**:在`struts.xml`配置文件中,你需要声明你的拦截器,并将其添加到拦截器栈中。你可以为整个应用或特定...

    struts2之声明式异常捕捉

    在这个例子中,如果`MyAction`执行过程中抛出了`RuntimeException`或者其子类,Struts2会跳转到`error.jsp`页面显示错误信息。 除了基本的`exception-mapping`,我们还可以自定义更复杂的异常处理逻辑。例如,为...

    使用struts拦截器需要注意的一个小问题.docx

    - 如果在拦截器中抛出了未捕获的异常,Struts会根据配置处理这些异常。默认情况下,Struts会跳过后续的拦截器,并寻找与异常匹配的全局异常映射。确保正确配置异常处理,以防止程序异常中断。 6. **返回值与Action...

    struts2框架模板

    - **异常处理**:Struts2提供了全局异常处理机制,可统一处理Action抛出的异常。 7. **性能优化** - ** strut2-convention-plugin**:使用约定优于配置,减少XML配置。 - **Caching Interceptor**:缓存拦截器,...

    struts2的异常处理机制

    Struts2的拦截器(Interceptor)也可以参与到异常处理中,通过实现`ExceptionMappingInterceptor`接口,可以在拦截器中捕获并处理异常,提供更灵活的异常处理策略。 通过以上机制,Struts2允许开发者在处理业务...

Global site tag (gtag.js) - Google Analytics