Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security - JdbcUserDetailsManager / 9 сообщений из 9, страница 1 из 1
09.10.2010, 11:45
    #36890731
xrw
xrw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Привет всем.
Назрела необходимость сделать авторизацию пользователей через spring security.
Собственно саму авторизацию я сделал. Примерно так:
web.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/applicationContext.xml
            /WEB-INF/applicationContext-security.xml
        </param-value>
	</context-param>
	
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet- class >org.springframework.web.servlet.DispatcherServlet</servlet- class >
		<load-on-startup> 1 </load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>*. do </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>
		
	<listener>
		<listener- class >org.springframework.web.context.ContextLoaderListener</listener- class >
	</listener>
	<listener>
        <listener- class >org.springframework.web.util.Log4jConfigListener</listener- class >
    </listener>
	<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>

	<welcome-file-list>
		<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
	</welcome-file-list>
</web-app> 

applicationContext-security.xml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<?xml version="1.0" encoding="UTF-8"?>
<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"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:lang="http://www.springframework.org/schema/lang"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
		http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
		http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-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/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

	<http auto-config="true">
		<intercept-url pattern="/*" access="ROLE_USER" />
		<intercept-url pattern="/login.do" filters="none" />
		<form-login login-page="/login.do" />
	</http>



	<authentication-manager alias="authenticationManager">
		<authentication-provider>			
			<password-encoder hash="sha"/>
			<jdbc-user-service data-source-ref="dataSource" /> 
		</authentication-provider>
	</authentication-manager>
	
	<beans:bean id="dataSource"  class ="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<beans:property name="url" value="jdbc:mysql://localhost:3306/db" />
		<beans:property name="username" value="root" />
		<beans:property name="password" value="pass" />
	</beans:bean>
	
	<beans:bean id="userDetailsService"
		 class ="org.springframework.security.provisioning.JdbcUserDetailsManager">
		<beans:property name="dataSource" ref="dataSource" />
		<beans:property name="authenticationManager" ref="authenticationManager" />
		<beans:property name="enableAuthorities" value="true"/>
	</beans:bean>
	
	<beans:bean  class ="org.springframework.security.authentication.encoding.ShaPasswordEncoder" id="passwordEncoder"/>
	
</beans:beans>

dispatcher-servlet.xml (конфиг для DispatcherServelt)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?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"
	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">

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

	<context:component-scan base- package ="my.test.auth" />
</beans>

login.jsp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<h1 align="center">Авторизация</h1>

<h3>Введите Ваш логин</h3>

<form action="j_spring_security_check" method="post">
	<label	 for ="j_username">Имя пользователя</label>: 
	<input id="j_username" name="j_username" size="20" maxlength="50" type="text" /> 
	<br />
	<label  for ="j_password">пароль </label>: 
	<input id="j_password" 	name="j_password" size="20" maxlength="50" type="password" /> 
	<br />
	<input type="submit" value="Login" />
</form>

loginController
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 package  my.test.auth;

 import  org.springframework.stereotype.Controller;
 import  org.springframework.web.bind.annotation.RequestMapping;
 import  org.springframework.web.bind.annotation.RequestMethod;

 import  ru.xnull.web.BaseController;

@Controller
 public   class  LoginLogoutController{
	@RequestMapping(method = RequestMethod.GET, value = "/login.do")
	 public   void  home() {
		.....
	}
}

И вот теперь не знаю что дальше делать. Вроде как надо начать использовать org.springframework.security.provisioning.JdbcUserDetailsManager - этот класс реализует из кообки работу с пользователями (не только создание). Но ума не приложу где что должно находиться.
Народ просветите меня срочно плиз.
...
Рейтинг: 0 / 0
09.10.2010, 11:50
    #36890734
xrw
xrw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Самое главное забыл :)
Мне нужно реализовать регистрацию пользователей, то есть создание этих самых пользователей. Я знаю что для этого мне нужно использовать org.springframework.security.provisioning.JdbcUserDetailsManager, но чё с ним делать я не знаю, и нужно как-то создать страничку регистрации и привязать её к этому классу. Спрашивется как это всё сделать?
...
Рейтинг: 0 / 0
09.10.2010, 13:32
    #36890791
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
xrwСпрашивется как это всё сделать?
что конкретно не ясно? структура таблиц?
...
Рейтинг: 0 / 0
09.10.2010, 13:50
    #36890801
xrw
xrw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Таблицы я взял стандартные, просто было непонятно как пользоваться классом JdbcUserDetailsManager, для регистрации новых пользователей. Я полагал, что для этого класса существует какая-то стандартная jsp страница (так же как есть стандартная страница логина, которую spring предоставляет) которая будет проводить регистрацию пользователей используя класс JdbcUserDetailsManager.
Я попробовал использовать этот класс, и у меня получилось создать пользователя.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
 package  my.test;

 import  java.util.HashSet;
 import  java.util.Set;

 import  org.springframework.beans.factory.annotation.Autowired;
 import  org.springframework.security.authentication.encoding.PasswordEncoder;
 import  org.springframework.security.core.GrantedAuthority;
 import  org.springframework.security.core.userdetails.User;
 import  org.springframework.security.core.userdetails.UserDetails;
 import  org.springframework.security.provisioning.UserDetailsManager;
 import  org.springframework.stereotype.Controller;
 import  org.springframework.web.bind.annotation.RequestMapping;
 import  org.springframework.web.bind.annotation.RequestMethod;


@Controller
 public   class  RegisterUserController{
	@Autowired
	 private  UserDetailsManager userDetailsService;
	@Autowired
	 private  PasswordEncoder passwordEncoder;

	@RequestMapping(method = RequestMethod.GET, value = "/register.do")
	 public   void  home() {
		GrantedAuthority auth =  new  GrantedAuthority() {
			 private   static   final   long  serialVersionUID = 1L;

			 public  String getAuthority() {
				 return  "ROLE_USER";
			}
		};
		Set<GrantedAuthority> set =  new  HashSet<GrantedAuthority>();
		set.add(auth);
		
		UserDetails details =  new  User("root",  passwordEncoder.encodePassword("root",  new  Object()), true, true, true, true, set);
		userDetailsService.createUser(details);
	}
}

Вопрос решился вроде как.
...
Рейтинг: 0 / 0
02.03.2011, 16:15
    #37144588
VoDA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
xrw,

спасибо. воспользовался твоим кодом как примером. намного ускорило понимание как это сделать =)))
...
Рейтинг: 0 / 0
27.05.2011, 22:04
    #37283316
issatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
xrw,

Вопрос. String security используется только при авторизации в веб приложениях или также можно использовать для Netbeans (java), для подключения окна входа к базе данных? Спасибо.
...
Рейтинг: 0 / 0
31.05.2011, 07:39
    #37286547
xrw
xrw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Теоретически во всех :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.08.2016, 00:27
    #39287797
Alexis220382
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Приветствую

Если бы еще sql скрипт для таблички выложил, то вообще супер было бы))

Спасибо.
...
Рейтинг: 0 / 0
07.08.2016, 01:35
    #39287802
Alexis220382
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Security - JdbcUserDetailsManager
Решение найдено, Гугл рулит и разруливает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DROP TABLE IF EXISTS `users`;

CREATE TABLE IF NOT EXISTS `users` (
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `enabled` BOOLEAN NOT NULL ,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `authorities`;

CREATE TABLE IF NOT EXISTS `authorities`(
  `username` varchar(255) NOT NULL,
  `authority` varchar(255) NOT NULL,
  CONSTRAINT `fk_authorities_users`
  FOREIGN KEY(`username`) REFERENCES users(username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE UNIQUE INDEX ix_auth_username ON authorities(username, authority) ;
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Security - JdbcUserDetailsManager / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]