Ich benutze Federsicherheit in meiner Anwendung, wo ich einige URLs für die Authentifizierung abfangen. Obwohl die URL "/ securedMapping1" den Benutzer zur Anmeldung auffordert, indem er die Anmeldeseite anzeigt, funktioniert die Anmeldung jedoch nicht. Selbst wenn ich die korrekten Anmeldeinformationen gebe, gehe ich zurück zur Anmeldeseite mit "Bad credentials" Fehler durch Aufrufen der URL für die fehlgeschlagene Authentifizierung dh authentication-failure-url = "/ login? Error = true" wird jeder aufgerufen Zeit unabhängig von korrekten/falschen Anmeldeinformationen. Kann mir jemand helfen, herauszufinden, was schief läuft? Unten ist der Code von wichtigen Dateien:Spring Security - Authentifizierung funktioniert nicht, auch die Anmeldeinformationen sind korrekt
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>spring-sec</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-sec</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-sec-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
Feder-sec-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.0.xsd">
<context:component-scan base-package="com.mir.*" />
<context:annotation-config />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/WEB-INF/pages/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/securedMapping1" access="hasRole('ROLE_ADMIN')"/>
<security:intercept-url pattern="/" access="permitAll" />
<security:intercept-url pattern="/hello" access="permitAll" />
<security:form-login login-page="/login"
login-processing-url="/j_spring_security_check"
default-target-url="/dashboard"
authentication-failure-url="/login?error=true"/>
<security:logout logout-success-url="/logout" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="admin" password="test123" authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
MyAppController.java
@Controller
public class MyAppController {
public MyAppController() {
System.out.println("Constructor...");
}
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("greeting", "Hello Guest");
return "helloworld";
}
@RequestMapping("/securedMapping1")
public String method1(Model model) {
model.addAttribute("greeting", "Hello "+getPrincipal()+ ", --> Accessed via secured URL.");
return "helloworld";
}
@RequestMapping("/dashboard")
public String method2(Model model) {
model.addAttribute("greeting", "Hello --- DEFAULT TARGET URL ---");
return "helloworld";
}
@RequestMapping("/login")
public String method3(Model model) {
System.out.println(" Going to display Login page...");
return "login";
}
// Logout page
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logout(ModelMap model) {
return "login";
}
}
login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring4Sec MVC</title>
</head>
<body>
<h1>Login</h1>
<c:if test="${not empty param.error}">
<font color="red">
Login Error <br/>
Reason: "${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}" <br/>
User: <c:out value="${SPRING_SECURITY_LAST_USERNAME}"/>
</font>
</c:if>
<form action="<c:url value="/j_spring_security_check"/>" method="post">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
user: <input type="text" name="j_username"/>
password: <input type="password" name="j_password"/>
<input type="submit" value="Login">
</form>
</body>
</html>
helloworld.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring4Sec MVC</title>
</head>
<body>
<h1>${greeting}</h1>
<a href="<c:url value="/securedMapping1" />">Secure</a>
</body>
</html>
Spot auf und es funktionierte wie ein Charme. Vielen Dank @dur. Ich war für einige Zeit ahnungslos geworden. Und hier ist der modifizierte Code Teil von ** login.jsp **: 'user: \t passwort: ' – JavaYouth