2013-03-12 5 views
12

J'essaie d'apprendre comment fonctionne la sécurité de printemps, j'ai donc téléchargé un exemple de projet et j'ai ensuite essayé d'implémenter cette solution dans mon projet. Mais quand j'essaye de me connecter, j'obtiens l'erreur 404 et dans une barre d'adresse j'ai http://localhost:8080/fit/j_spring_security_check. J'ai essayé de regarder des questions similaires ici, mais je n'ai pas pu réaliser, comment l'appliquer à mon projet. Je serais vraiment reconnaissant si quelqu'un, plus expérimenté, pouvait m'aider.Spring 3 Security j_spring_security_check

Ma structure d'application ressemble à ceci:

enter image description here

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<context:annotation-config/> 

<context:component-scan base-package="cz.cvut.fit"/> 

<import resource="classpath:applicationContext-security.xml"/> 

</beans> 

applicationContext-web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<context:annotation-config/> 

<context:component-scan base-package="cz.cvut.fit" /> 

<mvc:annotation-driven /> 

<security:global-method-security jsr250-annotations="enabled" 
           proxy-target-class="true"/> 
</beans> 

applicationContext-security.xml:

<beans xmlns:security="http://www.springframework.org/schema/security" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/security 
      http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<security:http pattern="/css/**" security="none"/> 
<security:http pattern="/views/login.jsp*" security="none"/> 
<security:http pattern="/views/denied.jsp" security="none"/> 

<security:http auto-config="true" access-denied-page="/denied.jsp" servlet-api-provision="false"> 
    <security:intercept-url pattern="/views/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> 
    <security:intercept-url pattern="/views/edit/**" access="ROLE_EDIT"/> 
    <security:intercept-url pattern="/views/admin/**" access="ROLE_ADMIN"/> 
    <security:intercept-url pattern="/**" access="ROLE_USER"/> 
    <security:form-login login-page="/views/login.jsp" authentication-failure-url="/denied.jsp" 
         default-target-url="/home.jsp"/> 
    <security:logout/> 
</security:http> 

<security:authentication-manager> 
    <security:authentication-provider> 
     <security:user-service> 
      <security:user name="adam" password="adampassword" authorities="ROLE_USER"/> 
      <security:user name="jane" password="janepassword" authorities="ROLE_USER, ROLE_ADMIN"/> 
      <security:user name="sue" password="suepassword" authorities="ROLE_USER, ROLE_EDIT"/> 
     </security:user-service> 
    </security:authentication-provider> 
</security:authentication-manager> 

</beans> 
+7

'j_spring_security_check' est un Servlet où l'authentification réelle est faite et vous devez mapper l'action de votre formulaire de connexion à ce Servlet. Faites-vous cela sur votre page de connexion - '

...
'? – Lion

+1

S'il vous plaît montrer votre web.xml./j_spring_security_check L'URL doit être traitée par le filtre springSecurityFilterChain. –

+0

Oui, je suis ... Mais je n'ai aucune idée, que faire ensuite, pour que ça marche bien. : -/ – Dworza

Répondre

9

Vous essayez de valider à un uri basé sur le chemin de contexte actuel de la page Web. la balise JSTL lib peut être utilisée pour vous permettre de générer facilement les URL correctes en fonction du contexte de l'application. Vous pouvez le faire en utilisant une bibliothèque de balises si vous voulez l'implémenter rapidement. Pour ce faire, vous pouvez ajouter la bibliothèque de balises jstl au sommet de la jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

Vous pouvez ensuite utiliser ce qui suit pour poster au servlet de connexion.

<form action="<c:url value="/j_spring_security_check"></c:url>" method="post" role="form"> 

Cela vous permet de poster alway à < your_application_context>/j_spring_security_check.

référence pour jstl: http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/url.html

Questions connexes