Spring mvc / sécurité : à l'exclusion de la page de connexion de ressort de sécurité
Je suis à l'aide de spring mvc + de sécurité pour construire une simple application web et actuellement d'avoir des problèmes avec la connexion. Je ne suis pas en mesure d'exclure la page de connexion de la source de sécurité si je veux secure /** (tout essentiellement). C'est ainsi que ma config ressemble:
spring.security.xml
<http pattern="/login" security="none"/>
<http pattern="/view_register.htm" security="none"/>
<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page="/login" default-target-url="/game" authentication-failure-url="/failedlogin" />
<logout logout-success-url="/login" />
</http>
LoginController
@Controller
public class LoginLogoutController {
@RequestMapping(value="/login", method = RequestMethod.GET)
public String login(ModelMap model) {
return "login";
}
@RequestMapping(value="/failedlogin", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
model.addAttribute("error", "true");
return "login";
}
}
de connexion.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Login Page</title>
<style>
.errorblock {
color: #ff0000;
background-color: #ffEEEE;
border: 3px solid #ff0000;
padding: 8px;
margin: 16px;
}
</style>
</head>
<body onload='document.f.j_username.focus();'>
<h3>Login with Username and Password (Custom Page)</h3>
<c:if test="${not empty error}">
<div class="errorblock">
Your login attempt was not successful, try again.<br /> Caused :
${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
</div>
</c:if>
<form name='f' action="<c:url value='j_spring_security_check' />"
method='POST'>
<table>
<tr>
<td>User:</td>
<td><input type='text' name='j_username' value=''>
</td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='j_password' />
</td>
</tr>
<tr>
<td colspan='2'><input name="submit" type="submit"
value="submit" />
</td>
</tr>
<tr>
<td>Don't have an account yet.</td>
<td> <a href="<c:url value="view_register.htm" />" > Register here</a>
</td>
</tr>
</table>
</form>
</body>
</html>
Je tiens à assurer à l'ensemble de l'application et exlude la connexion et la page d'inscription. Avec ma config actuelle l'ensemble de la sécurité se comporte très strangly. Si je entrer dans de mauvaises informations d'identification de la
@RequestMapping(value="/login", method = RequestMethod.GET)
public String login(ModelMap model) {
est appelée et de l'autre main, si j'entre le nom d'utilisateur correct/pass de l'échec de la connexion du contrôleur de la méthode est appelée.
Découvert que si je modifie le
<intercept-url pattern="/**" access="ROLE_USER" />
à
<intercept-url pattern="/game*" access="ROLE_USER" />
et retirer le
<http pattern="/login" security="none"/>
tout fonctionne comme prévu. Sa très étrange et ne peut pas vraiment comprendre pourquoi ce qui se passe.
MODIFIER
Venez de créer une version minuscule de mon exemple de projet (maven) et téléchargées de:
fileswap.
Toute aide ou suggestion sera vraiment cool comme je suis encore confus.
OriginalL'auteur shippi | 2014-01-02
Vous devez vous connecter pour publier un commentaire.
Essayez d'insérer ces lignes:
après
<http>
, et ajouterauto-config="true"
à l'intérieur de<http>
:et de supprimer
Je ne sais pas ce que cette ligne est pour, mais il devrait fonctionner sans elle.
Voir le Printemps De Référence Sur La Sécurité pour plus de détails sur l'authentification anonyme (la chose importante à comprendre est que si un utilisateur anonyme peut accéder à une page, il ne signifie pas automatiquement qu'un utilisateur authentifié peut accéder aussi).
BWT,
ROLE_ANONYMOUS
est un construit-dans le rôle, maisROLE_USER
n'est pas, comme l'a expliqué ici. Vous devez vous assurer queROLE_USER
est attribué à l'utilisateur.Cette réponse explique pourquoi les modèles doivent se terminer par
/**
.OriginalL'auteur Alexey
Essayez d'utiliser cette configuration qui autorise l'accès anonyme à ces url:
Lorsque vous spécifiez les éléments suivants:
Uniquement les Url comme
~/game*
seront protégés, en laissant toutes les autres URLs non protégés."Lorsque vous spécifiez les éléments suivants: <intercepter url-pattern="/jeu*" access="ROLE_USER" /> Seules les Url comme ~/jeu* seront protégés, en laissant toutes les autres URLs non protégés." Ouais je sais, mais si je viens d' /jeu* la connexion.jsp se comporte correctement. Si les informations sont erronées affiche le message d'erreur comme il se doit et si j'entre un bon mot de passe et nom d'utilisateur je peux frapper l' /jeu. Mais avec /** il se comporte exactement dans le sens inverse. Essayé quelques variantes de syntaxe de la sécurité printemps config et toujours le même problème. Mais ouais merci pour votre réponse de toute façon.
pouvez-vous ajouter * pour l'ordonnée à l'origine-modèle d'url pour la connexion et de voir comme <intercepter url-pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
toujours le même 🙁
ensuite, essayez ce <intercepter url-pattern="/login*" filtres="none"/>
OriginalL'auteur Kevin Bowersox