Wenn ich versuche, ein benutzerdefiniertes Login-Formular mit Spring Security zu verwenden, bringt es mich auf die Seite/admin/login zurück, unabhängig davon, ob ich die richtigen Zugangsdaten eingegeben habe oder nicht. Wenn ich einen leeren <form-login />
benutze, funktioniert der Sicherheits-Check gut. Aber sobald ich eine benutzerdefinierte <form-login login-page="/admin/login" />
hinzufügen, werde ich immer wieder auf die gleiche Seite zurückkehren. Ich habe versucht, eine default-target-url="admin/forSale" />
hinzuzufügen, aber ich bin immer noch auf die Anmeldeseite zurückgekehrt. Nachdem ich die korrekten Zugangsdaten angegeben und auf die Anmeldeseite zurückgekehrt bin, versuche ich auf eine geschützte URL zuzugreifen und werde wieder zur Anmeldeseite zurückkehren. Daher bin ich mir zu 99% sicher, dass die Sicherheitsüberprüfung überhaupt nicht durchgeführt wurde.Spring Security 3.1
Die action="<c:url value='j_spring_security_check' />"
in meinem JSP erstellt eine URL zu http://localhost:8080/sharleepark/admin/j_spring_security_check
. Ich nehme an, der Filter sollte das trotzdem aufgreifen und die Sicherheit entsprechend verarbeiten?
Ich bin überzeugt, dass es einen einfachen Fehler in meinem Controller oder JSP gibt, den ich nicht abholen. Ich verwende Tiles2 Templates auch, könnte das ein Teil des Problems sein? Ich habe ein paar Tage damit verbracht und habe alle Spring Security Tutorials ausprobiert, die ich vergebens finden kann. Vielen Dank im Voraus für Ihre Hilfe.
feder servlet.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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<!-- Scans packages to auto declare the beans we require -->
<context:component-scan base-package="au.com.sharleepark.controller" />
<context:component-scan base-package="au.com.sharleepark.service" />
<context:component-scan base-package="au.com.sharleepark.hibernate" />
<context:component-scan base-package="au.com.sharleepark.helper" />
<mvc:annotation-driven />
<tx:annotation-driven />
<!-- Map our static resources to a friendly URL -->
<mvc:resources location="/static/" mapping="/static/**" />
<!-- Specify the view resolver that we wish to use -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
<!-- Tell the tiles configurator where our tiles configuration files are located -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles.xml</value>
</list>
</property>
</bean>
<!-- Our datasource -->
<!-- Defines our connection to the database -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
destroy-method="destroy">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://blah blah" />
<property name="username" value="" />
<property name="password" value="" />
<property name="suppressClose" value="true" />
<property name="autoCommit" value="true" />
</bean>
<!-- Session Factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="au.com.sharleepark.domain" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">validate</prop>
<prop key="show_sql">true</prop>
</props>
</property>
</bean>
<!-- Data Access Objects -->
<!-- <bean id="hibernateDAO" class="au.com.sharleepark.hibernate.HibernateDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean> -->
<!-- Transaction management -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- Spring exception translation post processor for the DAO layer -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
</beans>
feder security.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="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">
<http pattern="/static/**" security="none" />
<http use-expressions="true">
<intercept-url pattern="/admin/login" access="permitAll" />
<intercept-url pattern="/admin/**" access="isAuthenticated()" />
<intercept-url pattern="/**" access="permitAll" />
<form-login login-page="/admin/login" />
<logout /> <!-- Not there is currently a logout link anyway -->
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="rod" password="koala" authorities="supervisor, teller, user" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
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" metadata-complete="true">
<display-name>Sharlee Park</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-security.xml
/WEB-INF/spring-servlet.xml
</param-value>
</context-param>
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
adminLoginController.java (Controller)
package au.com.sharleepark.controller.admin;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
/**
* Controller class for the administration login
* @author Steve
* @version 1.00
*
* Change History
* 08/11/12 - Created
*/
@Controller
@RequestMapping(value="admin")
public class AdminLoginController {
private static final Logger logger = Logger.getLogger(AdminLoginController.class);
@RequestMapping(value="/login")
public ModelAndView doView(@RequestParam(value="error", required=false) boolean error) {
logger.info("processing Login");
ModelAndView mav = new ModelAndView();
mav.setViewName("admin/login");
if (error) {
logger.error("Invalid Credentials");
mav.addObject("error", "Invalid login credentials");
}
return mav;
}
}
adminLogin.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div id="login">
<div id="loginContent">
<div class="error">${error}</div>
<form name='sharleeParkLoginForm' action="<c:url value='j_spring_security_check' />" method='POST'>
<fieldset>
<ul class="fieldUL">
<li>
<label class="inputLabel" for="j_username">Username</label>
<span>
<input class="inputField" type="text" tabindex="1" id="j_username" name="j_username" size="25" maxlength="25">
</span>
</li>
</ul>
<ul class="fieldUL">
<li>
<label class="inputLabel" for="spPassword">Password</label>
<span>
<input class="inputField" type="password" tabindex="2" id="j_password" name="j_password" size="25" maxlength="25">
</span>
</li>
</ul>
<ul class="fieldUL">
<li><input name="submit" type="submit" value="Login"></li>
</ul>
</fieldset>
</form>
</div>
</div>
tiles.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="base.definition" template="/WEB-INF/jsp/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/WEB-INF/jsp/header.jsp" />
<put-attribute name="body" value="" />
</definition>
....
<!-- ADMIN PAGES -->
<definition name="admin/login" extends="base.definition">
<put-attribute name="title" value="Administration Login" />
<put-attribute name="body" value="/WEB-INF/jsp/admin/adminLogin.jsp" />
</definition>
....
</tiles-definitions>
Down vote? Zugegeben, ich war sehr sehr neu in Spring Security, aber wenn Sie unten abstimmen, bitte kommentieren Sie mich und andere können davon profitieren. – DecafCoder