Spring Security - strona logowania

0

Witam,
mam taki problem podczas logowania przy uzyciu Spring Security:
wszystko działa poprawnie przy domyślnej stronie widoku logowania, ale gdy próbuje dodać własny login.jsp wyskakuje bład.
Mógłby mi ktoś pomóc ?

HomeController.java

@Controller
public class HomeController {

	@RequestMapping("/")
	public String welcome(Model model) {
		model.addAttribute("greeting", "Witaj w sklepie internetowym!");
		model.addAttribute("tagline", "Wyjątkowym i jedynym sklepie internetowym");
		return "welcome";
	}

	@RequestMapping(value = "/admin**", method = RequestMethod.GET)
	public ModelAndView adminPage() {

		ModelAndView model = new ModelAndView();
		model.addObject("title", "Spring Security Login Form - Database Authentication");
		model.addObject("message", "This page is for ROLE_ADMIN only!");
		model.setViewName("admin");

		return model;

	}

	@RequestMapping(value = "/login", method = RequestMethod.GET)
	public ModelAndView login(@RequestParam(value = "error", required = false) String error,
			@RequestParam(value = "logout", required = false) String logout) {

		ModelAndView model = new ModelAndView();
		if (error != null) {
			model.addObject("error", "Invalid username and password!");
		}

		if (logout != null) {
			model.addObject("msg", "You've been logged out successfully.");
		}
		model.setViewName("login");

		return model;

	}}

Login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Login Page</title>
<style>
.error {
	padding: 15px;
	margin-bottom: 20px;
	border: 1px solid transparent;
	border-radius: 4px;
	color: #a94442;
	background-color: #f2dede;
	border-color: #ebccd1;
}

.msg {
	padding: 15px;
	margin-bottom: 20px;
	border: 1px solid transparent;
	border-radius: 4px;
	color: #31708f;
	background-color: #d9edf7;
	border-color: #bce8f1;
}

#login-box {
	width: 300px;
	padding: 20px;
	margin: 100px auto;
	background: #fff;
	-webkit-border-radius: 2px;
	-moz-border-radius: 2px;
	border: 1px solid #000;
}
</style>
</head>
<body onload='document.loginForm.username.focus();'>

	<h1>Spring Security Custom Login Form (Annotation)</h1>

	<div id="login-box">

		<h2>Login with Username and Password</h2>

		<c:if test="${not empty error}">
			<div class="error">${error}</div>
		</c:if>
		<c:if test="${not empty msg}">
			<div class="msg">${msg}</div>
		</c:if>

		<form name='loginForm'
		    action="<c:url value='j_spring_security_check' />" method='POST'>

		    <table>
			<tr>
				<td>User:</td>
				<td><input type='text' name='user' value=''></td>
			</tr>
			<tr>
				<td>Password:</td>
				<td><input type='password' name='pass' /></td>
			</tr>
			<tr>
			        <td colspan='2'>
                                <input name="submit" type="submit" value="submit" />
                                </td>
			</tr>
		   </table>

		   <input type="hidden" 
                     name="${_csrf.parameterName}" value="${_csrf.token}" />
		</form>
	</div>

</body>
</html>

Admin.jsp

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>
<html>
<body>
	<h1>Title : ${title}</h1>
	<h1>Message : ${message}</h1>

	<c:url value="/j_spring_security_logout" var="logoutUrl" />

		<!-- csrt support -->
	<form action="${logoutUrl}" method="post" id="logoutForm">
		<input type="hidden" 
			name="${_csrf.parameterName}"
			value="${_csrf.token}" />
	</form>
	
	<script>
		function formSubmit() {
			document.getElementById("logoutForm").submit();
		}
	</script>
</body>
</html>

DispatcherSeervlet-context.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"
	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-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<mvc:annotation-driven />

	<mvc:annotation-driven enable-matrix-variables="true" />



	<context:component-scan base-package="com.packt.webstore" />

	<!-- <resources mapping="/resources/**" location="/resources/" /> -->

 	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/" />
		<property name="suffix" value=".jsp" />
	</bean>  

	<bean id="messageSource"
		class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basename" value="classpath:messages" />
		<property name="defaultEncoding" value="UTF-8" />
	</bean>

	<bean id="localeResolver"
		class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
		<property name="defaultLocale" value="en" />
	</bean>
	
</beans>

SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	DataSource dataSource;

	@Autowired
	public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
		auth.jdbcAuthentication().dataSource(dataSource)
				.usersByUsernameQuery("select Name,Password, Enabled from user where Name=?")
				.authoritiesByUsernameQuery("select Name, Role from user_Role where Name=?");
	}

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.authorizeRequests().antMatchers("/admin").access("hasRole('ROLE_ADMIN')").and().formLogin()
				.loginPage("/login").and().csrf();
//		// http.csrf().disable();
	}
}
0

A jaki blad?

0
WARNING: No mapping found for HTTP request with URI [/webstore/j_spring_security_check] in DispatcherServlet with name 'DispatcherServlet'
0

Spróbuj dodać przed /j_spring_security_check ${request.contextPath}

0

nic to nie dało, adres URL tez sie nie zmienil tak jakby "${request.contextPath}" było puste

0

ktos moze ma jakiś inny pomysł ?

0

W springu 4 defaultowy url do logowania został zmieniony z 'j_spring_security_check' na 'login', podmień w jsp i spróbuj ;)

0

Też parę dni temu się z tym męczyłem. Mi pomogło dodanie linijki w <form-login> w konfiguracji spring security:

login-processing-url="/j_spring_security_check"
0

podmieniłem 'j_spring_security_check' na 'login' i błąd już nie leci, ale teraz nie da się zalogować, cały czas wyskakuje, że błedny login lub hasło.
W domyślnej stronie logowania nie ma takiego problemu

0

Głowy nie dam, ale tutaj prawdopodobnie też leży problem:

<tr>
                <td>User:</td>
                <td><input type='text' name='user' value=''></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='password' name='pass' /></td>
            </tr>

Defaultowy name pola z nazwą użytkownika to 'username', natomiast z hasłem 'password'.. u Ciebie są inne. Podmień i spróbuj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1