@Secured ne fonctionne pas dans le contrôleur, mais l'interception-url semble fonctionner correctement
Il ne ressemble pas à @Garantis sur les méthodes de mon @Contrôleur sont en cours de lecture. Lorsque le filtrage de sécurité basé sur sec:interception url, ce semble fonctionner très bien. Le code ci-dessous dans la Sécurité Printemps de me donner cette entrée de journal:
DEBUG: org.springframework.de sécurité.web.d'accès.intercepter.FilterSecurityInterceptor - objet Public - authentification pas tenté
web.xml
contextConfigLocation
/WEB-INF/spring/root-context.xml
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Filter security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
servlet-context.xml titulaire de la configuration de la viewResolvers et toutes les gares de. Cette configuration est d'annotation-driven.
root-context.xml
<sec:global-method-security secured-annotations="enabled" />
<sec:http auto-config="true">
<sec:http-basic/>
</sec:http>
<!-- Declare an authentication-manager to use a custom userDetailsService -->
<sec:authentication-manager>
<sec:authentication-provider
user-service-ref="userDetailsService">
<sec:password-encoder ref="passwordEncoder" />
</sec:authentication-provider>
</sec:authentication-manager>
<bean
class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder"
id="passwordEncoder" />
<sec:user-service id="userDetailsService">
<sec:user name="john" password="john" authorities="ROLE_USER, ROLE_ADMIN" />
<sec:user name="jane" password="jane" authorities="ROLE_USER" />
</sec:user-service>
PingController.java
@Controller
public class PingController {
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/ping", method = RequestMethod.GET)
public void ping() {
}
}
Cela ne semble pas avoir de rapport à la méthode d'authentification que j'utilise, de sorte que le base-http-tag peut être négligé.
J'ai cette idée que l' @Sécurisé ne fonctionne pas à cause de cela d'être utilisé dans un autre contexte que celui de la root-context.xml dans lequel la sécurité est configuré. J'ai essayé de déplacer cette configuration à l'servlet-context.xml mais il ne semble pas atteindre le springSecurityFilterChain. Toute réflexion sur le problème et de et de ma théorie?
source d'informationauteur kareblak
Vous devez vous connecter pour publier un commentaire.
Vous avez raison,
<global-method-security>
est appliquée à chaque contexte. Cependant, vous n'avez pas besoin de déplacer l'ensemble de la configuration de la sécurité pourservlet-context.xml
il suffit d'ajouter un<global-method-security>
élément.Voir Printemps FAQ sur la Sécurité (l'emphase est mienne). Si vous appliquez pointcuts de la couche de service, vous ne devez définir
<global-method-security>
dans votre application de contexte de sécurité.