0 0

Spring security3.1 AccessDeniedException抛出的时候,指定的拒否画面无法跳转10

配置如下: spring-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">

	<http use-expressions="true" auto-config="true">
		<intercept-url pattern="/login.jsp" access="permitAll" />
		<intercept-url pattern="/accessDenied.jsp" access="permitAll"/>
		<form-login login-page="/login.jsp" default-target-url="/menu/init"
			always-use-default-target="true" authentication-failure-url="/login.jsp?login_error=1" />
		<logout invalidate-session="true" logout-success-url="/login.jsp"
			logout-url="/j_spring_security_logout" />
		<access-denied-handler error-page="/accessDenied.jsp"/>
		<!-- 实现免登陆验证 -->
		<remember-me />
		<session-management invalid-session-url="/timeout.jsp"
			session-fixation-protection="none">
			<concurrency-control max-sessions="1"
				error-if-maximum-exceeded="true" />
		</session-management>
		<custom-filter ref="myFilter" before="FILTER_SECURITY_INTERCEPTOR" />
	</http>
	<beans:bean id="myFilter" class="argo.cost.common.security.MySecurityFilter">
		<!-- 用户拥有的权限 -->
		<beans:property name="authenticationManager" ref="myAuthenticationManager" />
		<!-- 用户是否拥有所请求资源的权限 -->
		<beans:property name="accessDecisionManager" ref="myAccessDecisionManager" />
		<!-- 资源与权限对应关系 -->
		<beans:property name="securityMetadataSource" ref="mySecurityMetadataSource" />
	</beans:bean>
	<!-- UserDetailsServiceBean -->
	<authentication-manager alias="myAuthenticationManager">
		<authentication-provider user-service-ref="myUserDetailServiceImpl" />
	</authentication-manager>
	<beans:bean id="myAccessDecisionManager"
		class="argo.cost.common.security.MyAccessDecisionManager"></beans:bean>
	<beans:bean id="mySecurityMetadataSource"
		class="argo.cost.common.security.MySecurityMetadataSource">
		<beans:constructor-arg name="resourcesDao" ref="resourcesDao"></beans:constructor-arg>
	</beans:bean>
	<beans:bean id="myUserDetailServiceImpl"
		class="argo.cost.common.security.MyUserDetailServiceImpl">
		<beans:property name="usersDao" ref="usersDao"></beans:property>
		<beans:property name="resourcesDao" ref="resourcesDao"></beans:property>
	</beans:bean>
	<beans:bean id="resourcesDao" class="argo.cost.common.dao.ResourcesDaoImpl"></beans:bean>
	<beans:bean id="usersDao" class="argo.cost.common.dao.UsersDaoImpl"></beans:bean>
</beans:beans>  

 

package argo.cost.common.security;

import java.util.Collection;
import java.util.Iterator;

import org.springframework.security.access.AccessDecisionManager;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;

/**
 * <p>
 * 権限判定。
 * </p>
 * 
 * @author COST argo Corporation.
 */
public class MyAccessDecisionManager implements AccessDecisionManager {

	public void decide(Authentication authentication, Object object,
			Collection<ConfigAttribute> configAttributes)
			throws AccessDeniedException, InsufficientAuthenticationException {
		if (configAttributes == null) {
			return;
		}
	
		Iterator<ConfigAttribute> iterator = configAttributes.iterator();
		while (iterator.hasNext()) {
			ConfigAttribute configAttribute = iterator.next();

			
			String needPermission = configAttribute.getAttribute();
			System.out.println("needPermission is " + needPermission);

			
			for (GrantedAuthority ga : authentication.getAuthorities()) {
				if (needPermission.equals(ga.getAuthority())) {
					return;
				}
			}
		}
		
		throw new AccessDeniedException("无权访问! ");
	}

	public boolean supports(ConfigAttribute attribute) {
		// TODO Auto-generated method stub
		return true;
	}

	public boolean supports(Class<?> clazz) {
		// TODO Auto-generated method stub
		return true;
	}

}

 当用户权限判定无权限,AccessDeniedException("无权访问! ");抛出后,没有跳转到指定的(/accessDenied.jsp),直接跳转到了HTTP403画面。

 

求解。

2014年3月25日 18:03
目前还没有答案

相关推荐

    Spring Security3.1入门Demo

    本示例是基于Spring Security 3.1版本的一个入门级演示项目,旨在帮助开发者快速理解并开始使用该框架。 在Spring Security 3.1中,主要涉及的核心概念有以下几点: 1. **安全过滤器链**:Spring Security通过一...

    Spring Security3.1 最新配置实例 (转载)

    **Spring Security 3.1 最新配置实例** Spring Security 是一个功能强大且高度可定制的 Java 安全框架,用于处理 Web 应用程序的安全需求。在 Spring Security 3.1 版本中,该框架提供了许多关键特性,如认证、授权...

    spring spring security2.5 jar

    5. **异常处理**:当安全规则不满足时,Spring Security会抛出相应的安全异常,如`AccessDeniedException`表示用户无权访问,`AuthenticationException`表示认证失败。这些异常可以被自定义处理,以返回友好的错误...

    拒绝访问异常处理(AccessDeniedException)_spring security例子

    拒绝访问异常处理(AccessDeniedException)_spring security例子 博客:blog.csdn.net/dsundsun

    Spring Security如何使用URL地址进行权限控制

    Spring Security如何使用URL地址进行权限控制 Spring Security是一个功能强大且广泛应用的Java安全框架,它提供了许多功能,包括身份验证、授权、加密等。其中,权限控制是Spring Security的一个重要组件,它允许...

    自定义Spring Security的身份验证失败处理方法

    自定义Spring Security的身份验证失败处理方法 在 Spring Security 中,身份验证失败处理方法是一个非常重要的组件,它能够帮助我们处理身份验证失败的情况。然而,默认的身份验证失败处理方法并不总是能够满足我们...

    Spring Security 3多用户登录实现一

    Spring Security提供了统一的异常处理机制,如`AccessDeniedException`(访问被拒绝)和`AuthenticationException`(认证失败)。可以通过实现`AccessDeniedHandler`和`AuthenticationEntryPoint`接口来自定义异常...

    一个比较好的spring security实例

    Spring Security 是一个强大的安全框架,主要用于Java应用的安全管理。它提供了认证、授权和访问控制等功能,使得开发者可以轻松地在应用程序中实现复杂的安全需求。在这个名为 "mysecurity" 的压缩包中,很可能是...

    spring security2配置

    6. **异常处理**:当用户尝试访问未授权的资源时,Spring Security 将抛出`AccessDeniedException`。我们可以配置自定义的错误页面(如`access-denied.jsp`),以便提供更友好的用户体验。 7. **过滤器链**:Spring...

    spring security demo2

    Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于...通过学习和实践这个示例,你可以更深入地理解Spring Security的机制,并能够将其应用到自己的项目中,构建出安全的Web应用程序。

    springSecurity

    - Spring Security会抛出特定的异常,如`AccessDeniedException`和`AuthenticationException`,可以通过全局异常处理器捕获并处理。 总结来说,Spring Security为Java应用程序提供了全面的安全保障。从简单的身份...

    Spring security认证与授权(一)源代码

    当认证或授权失败时,Spring Security会抛出相应的异常,如`BadCredentialsException`或`AccessDeniedException`。你可以自定义异常处理策略,例如重定向到特定的错误页面。 8. **表达式式访问控制(Expression-...

    Spring Security 3 源码分析文档

    7. **异常处理**:Spring Security有自己的异常处理机制,如AuthenticationException、AccessDeniedException等。学习这些异常的使用和处理方式,有助于编写健壮的代码。 8. **集成Spring MVC**:Spring Security与...

    Spring security4.1 中文版参考手册 PDF版

    《Spring Security 4.1 中文版参考手册》是针对Spring Security框架的详细指南,适合对Java和Spring框架有一定了解的开发者。Spring Security是Spring生态体系中的一个核心组件,主要负责应用程序的安全管理,包括...

    Spring Security 3.x 完整入门教程 源代码

    6. **异常处理**:当安全检查失败时,Spring Security会抛出相应的异常,如`AccessDeniedException`表示用户没有足够的权限,`AuthenticationException`表示认证失败。你可以自定义异常处理逻辑,提供友好的错误页面...

    Spring Security安全权限管理手册 html

    - 当认证或授权失败时,Spring Security会抛出相应的异常,如AuthenticationException和AccessDeniedException,开发者可以自定义这些异常的处理方式。 9. **AOP支持**: - Spring Security利用了Spring的AOP...

    springsecurity例子

    当安全规则未通过时,Spring Security会抛出相应的异常,如`AccessDeniedException`或`AuthenticationException`。可以自定义异常处理页面或者全局异常处理器来优雅地展示错误信息。 9. **集成其他安全框架**: ...

    SpringSecurity4.0.4官方文档

    7. **异常处理**:Spring Security 提供了自定义的异常处理机制,比如未授权访问(`AccessDeniedException`)和认证失败(`AuthenticationException`)。 8. **国际化**:Spring Security 支持多语言环境,可以通过...

    spring-security 案例

    - **AccessDeniedException**:当用户尝试访问未经授权的资源时抛出。 - **AuthenticationException**:身份验证失败时抛出。 - 自定义异常处理:可以定义自己的AccessDeniedHandler和AuthenticationEntryPoint来...

    SpringSecurity官网修改例子 tutorial

    8. **异常处理**:SpringSecurity提供了一套统一的异常处理机制,如`AuthenticationException`和`AccessDeniedException`,帮助开发者优雅地处理安全相关的错误。 9. **自定义登录逻辑**:你可以根据需求定制登录...

Global site tag (gtag.js) - Google Analytics