Announcement Announcement Module
Collapse
No announcement yet.
ClassFormatError when using @Secured and @RequestMapping on same method Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • ClassFormatError when using @Secured and @RequestMapping on same method

    Hello. I'm having a weird error thrown when I try to use @Secured or @PreAuthorize in a @Controller method already annotated with @RequestMapping. It gives me the following error when I try to start the application:

    Code:
    Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file com/dnp/web/controllers/HomeController
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
    	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150)
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    	at org.springframework.util.ClassUtils.forName(ClassUtils.java:258)
    	at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:417)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1283)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1254)
    	... 43 more
    I'm using spring 3.1 and spring security 3.1. Also, the main sections of my servlet and security context files are:

    security-context.xml
    Code:
    	<http pattern="/resources/**" security="none"/>
    	
    	<http use-expressions="true" entry-point-ref="authenticationEntryPoint">
    		<intercept-url pattern="/login.htm*" access="isAnonymous()" />
    		<intercept-url pattern="/*" access="isAuthenticated()" />
    		<form-login authentication-failure-url="/login.htm" />
    		<logout />
    	</http>
    	
    	<authentication-manager alias="authenticationManager">
    		<authentication-provider user-service-ref="usuarioService">
    			<password-encoder ref="passwordEncoder" />
    		</authentication-provider>
    		
    	</authentication-manager>
    	
    	<!-- Login form ajax redirection -->
    	<beans:bean id="authenticationEntryPoint" class="com.dnp.security.impl.JsonAwareAuthenticationEntryPoint">
    		<beans:constructor-arg name="loginFormUrl" value="/login.htm" />
    	</beans:bean>
    	
    	<!-- Password encoder -->
    	<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />
    servlet-context.xml
    Code:
    	<!-- Secured controller actions -->
    	<sec:global-method-security pre-post-annotations="enabled" />
    	
    	<!-- Enables the Spring MVC @Controller programming model -->
    	<annotation-driven conversion-service="conversionService" />
    
    	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    	<resources mapping="/resources/**" location="/resources/" />
    
    	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<beans:property name="prefix" value="/WEB-INF/views/" />
    		<beans:property name="suffix" value=".jsp" />
    	</beans:bean>
    	
    	<context:component-scan base-package="com.dnp.web.controllers" />
    	
    	<!-- Enable @Valid for @RequestBody -->
    	<beans:bean class="com.dnp.util.RequestBodyValidatorAspect" />
    	
    	<!-- Flash service -->
    	<beans:bean id="flashService" class="com.dnp.service.impl.FlashServiceImpl" scope="session">
    		<aop:scoped-proxy proxy-target-class="false" />
    	</beans:bean>
    And the controller code:
    Code:
    @Controller
    public class HomeController {
    	
    	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    	
    	/**
    	 * Simply selects the home view to render by returning its name.
    	 */
    	@PreAuthorize("hasRole('ROLE_USER')")
    	@RequestMapping(value = "/", method = RequestMethod.GET)
    	public String home(Locale locale, Model model) {
    		logger.info("Welcome home! the client locale is "+ locale.toString());
    		
    		Date date = new Date();
    		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
    		
    		String formattedDate = dateFormat.format(date);
    		
    		model.addAttribute("serverTime", formattedDate );
    		
    		return "home";
    	}
    	
    }
    PD: The full application trace is here: http://pastebin.com/raw.php?i=VxdYPDXL
Working...
X