Ive setup a simple REST API using Spring 4 with Spring security
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mysabisabi-servlet.xml,
classpath*:META-INF/spring/applicationContext.xml,
classpath*:META-INF/spring/mysabisabi-security.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mysabisabi-rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mysabisabi-rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
AccountController.java
@RestController
@RequestMapping(value="/api")
public class AccountController {
@RequestMapping(value="/update", method=RequestMethod.POST)
public ResponseEntity<GenericResponse> updateRegistrationToken(@RequestBody RegistrationToken token){
GenericResponse response = new GenericResponse();
//some code here
return new ResponseEntity<GenericResponse>(response, HttpStatus.ACCEPTED);
}
}
mysabisabi-servlet.xml
<bean id="jacksonObjectMapper" class="com.mysabisabi.mapper.JsonCustomMapper" />
<bean id="jackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<ref bean="jackson2HttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
mysabisabi-security.xml
<http pattern="/oauth/token" create-session="stateless" authentication-manager-ref="clientAuthenticationManager"
xmlns="http://www.springframework.org/schema/security">
<intercept-url pattern="/oauth/token" access="isFullyAuthenticated()"/>
<csrf disabled="true"/>
<anonymous enabled="false"/>
<http-basic entry-point-ref="clientAuthenticationEntryPoint"/>
<!-- include this only if you need to authenticate clients via request parameters -->
<custom-filter ref="clientCredentialsTokenEndpointFilter" after="BASIC_AUTH_FILTER"/>
<access-denied-handler ref="oauthAccessDeniedHandler"/>
</http>
<http pattern="/api/*" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint"
access-decision-manager-ref="accessDecisionManager" xmlns="http://www.springframework.org/schema/security">
<anonymous enabled="false"/>
<csrf disabled="true"/>
<intercept-url pattern="/api/*" access="hasRole('ROLE_USER')"/>
<custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER"/>
<access-denied-handler ref="oauthAccessDeniedHandler"/>
applicationContext.xml
<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.mysabisabi" />
<context:property-placeholder location="classpath:mysabisabi.properties" />
<tx:annotation-driven transaction-manager="transactionManager" />
//dataSource configuration
LOG File
2016-07-16 16:24:45 INFO RequestMappingHandlerMapping:537 - Mapped "{[/api/update],methods=[POST]}" onto public org.springframework.http.ResponseEntity<com.mysabisabi.dto.response.GenericResponse> com.mysabisabi.controller.AccountController.updateRegistrationToken(com.mysabisabi.dto.request.RegistrationToken)
When I tried to access http://localhost:8080/mysabisabi/api/update
I got HTTPStatus 404 Not Found - The requested resource is not available
I've tried both /
and /*
as url-pattern but still the same.
Can someone point out what did I miss?
Thanks.