#spring-mvc #spring-security
#spring-mvc #spring-безопасность
Вопрос:
Я применил приведенный ниже код, но он не работал, может ли кто-нибудь, пожалуйста, дать мне какое-нибудь решение для этого.Спасибо.
Метод контроллера:
@Controller
public class UserController {
@Secured("ROLE_USER")
@RequestMapping(value="user/{userName}", method=RequestMethod.GET)
public @ResponseBody User getAvailability(@PathVariable String userName, HttpServletResponse response) { }
}
applicationContext-security.xml связанные конфигурации:
<global-method-security secured-annotations="enabled" />
<http>
<intercept-url pattern="/user" requires-channel="https"/>
<http-basic/>
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider>
<user-service>
<user password="password" name="manager" authorities="ROLE_MANAGER"/>
<user password="password" name="user" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
Ответ №1:
Вы хотите применить защиту с помощью <intercept_url>
тега.
Например:
<intercept-url pattern="/user" requires-channel="https" access="ROLE_USER"/>
Комментарии:
1. Привет, ericacm! большое спасибо за ваш ответ, да, со временем я поступал таким образом, но теперь (с более новой Spring Security), похоже, мы можем выполнять те же действия, ограничивающие доступ, на уровне метода, что означает, что вместо выполнения какой-либо конфигурации xml мы можем напрямую указать это для конкретного метода.
Ответ №2:
Если вы хотите использовать управление доступом на основе URL, вам необходимо добавить /**
<intercept-url pattern="/user/**" requires-channel="https"/>
Если вы хотите безопасность на уровне метода, вам нужно
<context:component-scan base-package="com.yourcompany.etc"/>
<security:global-method-security secured-annotations="enabled"/>
также в вашем web.xml вам нужно добавить конфигурацию spring security в качестве параметра в ваш сервлет
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext-security.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
Комментарии:
1. Привет, Питер Санто! Большое спасибо за ваш ответ, при таких конфигурациях @Secured не будет работать внутри контроллера Spring (с @Controller).
2. Это работает и на контроллерах, но вам нужно добавить связанный с spring security XML в XML вашего сервлета. По крайней мере, там должен быть <security:global-method-security secured-annotations=»enabled»/>
3. Привет, Питер Санто! Большое спасибо за освобождение. Я попробую это, спасибо.