Я использую Spring MVC для предоставления услуг RESTful. Я уже включил аутентификацию через HTTPBasicAuthentication, и с помощью <security:http>
я могу контролировать, какие роли могут получать доступ к URL-адресам.
Теперь я хочу использовать аннотацию @Secured
. Я попытался добавить его в методы контроллера, но он не работает. Он просто ничего не делает.
Вот мой класс Controller
:
@Controller
@RequestMapping("/*")
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
private static final String USERS = "/users";
private static final String USER = USERS+"/{userId:.*}";
@RequestMapping(value=USER, method=RequestMethod.GET)
@Secured(value = {"ROLE_ADMIN"})
public @ResponseBody User signin(@PathVariable String userId) {
logger.info("GET users/"+userId+" received");
User user= service.getUser(userId);
if(user==null)
throw new ResourceNotFoundException();
return user;
}
}
Это мой security-context.xml
:
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_USER"/>
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager>
<authentication-provider>
<user-service>
<user name="[email protected]" password="admin"
authorities="ROLE_USER, ROLE_ADMIN" />
<user name="[email protected]" password="pswd"
authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
И мой root-context.xml
:
<context:component-scan base-package="org.mypackage" />
<import resource="database/DataSource.xml"/>
<import resource="database/Hibernate.xml"/>
<import resource="beans-context.xml"/>
<import resource="security-context.xml"/>
Все работает нормально, но если я добавлю @Secured
, он просто ничего не сделает: я также могу получить доступ к защищенному методу с [email protected], который не имеет привилегий ROLE_ADMIN. Я уже пытался переместить <security:global-method-security>
в root-context.xml
, не получается. Я также пытался защитить тот же метод с помощью тега <security:http>
, он отлично работает, но я хочу использовать аннотацию @Secured
.
Спасибо.
EDIT: у меня также есть файлы конфигурации servlet-context.xml
и controllers.xml
в подкаталоге appServlet.
Вот servlet-context.xml
:
<mvc:resources mapping="/resources/**" location="/resources/" />
<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>
<beans:import resource="controllers.xml" />
И controllers.xml
:
<context:component-scan base-package="org.mose.emergencyalert.controllers" />
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<beans:bean id="homeController" class="org.mose.emergencyalert.controllers.HomeController"/>
security:
дляglobal-method-security
, гдеauthentication-manager
нет? - person Arun P Johny   schedule 21.01.2013servlet-context.xml
иcontrollers.xml
. Может быть, мне нужно указать<global-method-security>
вserlvet-context.xml
? - person user1781028   schedule 21.01.2013