Как пропустить определенный метод из проверки подлинности весной mvc. Мой файл spring_security.xml
содержит:
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/logout" access="permitAll"/>
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
<logout logout-success-url="/logoutPage" logout-url="/logout" />
<form-login authentication-failure-url="/login?auth=fail"
login-page="/login"
login-processing-url="/loginPage"
password-parameter="password"
username-parameter="username"
/>
</http>
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />
Теперь, как я могу пропустить аутентификацию для метода, определенного ниже, используя annotation
@Controller
public class DataController {
@PreAuthorize("permitAll")
@RequestMapping(value = "/data/info", method = RequestMethod.GET, headers = "Content-Type=application/json")
public @ResponseBody String getDetails() {
// some code
}
}
То, что я использовал, не работает. Благодарю.
В весенней безопасности есть два уровня безопасности:
intercept-url
PreAuthorize
.Вы можете смешивать эти два метода, а метод безопасности может использоваться с очень уточненными правилами, особенно с ACL, и может применяться к методам обслуживания или модели, но он не может использоваться для перезаписывания ограничений на основе URL.
попробуйте использовать что-то подобное
<http pattern="/data/info**" security="none"/>
Вы не можете. intercept-url
оценивается перед аннотациями контроллера.
Однако вы можете решить это, добавив следующее к вашему xml:
<intercept-url pattern="/data/info" access="permitAll"/>
@PreAuthorize("permitAll")
не имеет смысла, поскольку в принципе это не-op.
permitAll