Рубрики
Без рубрики

Пример XML-кода Spring Security + Гибернация

– Spring Security + Пример XML для гибернации

В этом уроке мы покажем вам, как интегрировать Hibernate 4 в Spring Security, пример конфигурации XML.

Используемые технологии:

  1. Пружина 3.2.8. ОСВОБОЖДЕНИЕ
  2. Защита пружины 3.2.3.ОСВОБОЖДЕНИЕ
  3. Переход в спящий режим 4.2.11. Окончательный
  4. Сервер MySQL 5.6
  5. JDK 1.6
  6. Мавен 3
  7. Затмение 4.3

Краткие заметки

  1. Создайте фабрику сеансов с помощью hibernate4.LocalSessionФакториБеан
  2. Внедрить фабрику сеансов в пользовательский интерфейс
  3. Для интеграции с Spring Security создайте класс, который реализует интерфейс UserDetailsService и загружает пользователя с помощью UserDao
  4. Менеджер транзакций должен быть объявлен, иначе Hibernate не будет работать весной

1. Каталог проектов

Окончательная структура каталогов проекта.

2. Зависимость от проекта

Список зависимостей проекта в файле POM.

	
		3.2.8.RELEASE
		3.2.3.RELEASE
		1.2
		5.1.30
		1.1.2
		1.7.6
		4.2.11.Final
		1.4
		2.5
	

	

		
		
			commons-dbcp
			commons-dbcp
			${dbcp.version}
		

		
		
			org.hibernate
			hibernate-core
			${hibernate.version}
		

		
		
			org.springframework
			spring-core
			${spring.version}
			
			  
				commons-logging
				commons-logging
			  
			
		

		
		
			org.springframework
			spring-webmvc
			${spring.version}
		

		
		
			org.springframework
			spring-aspects
			${spring.version}
		

		
		
			org.springframework
			spring-orm
			${spring.version}
		

		
		
			org.springframework.security
			spring-security-web
			${spring.security.version}
		

		
			org.springframework.security
			spring-security-config
			${spring.security.version}
		

		
		
			org.springframework.security
			spring-security-taglibs
			${spring.security.version}
		

		
		
			jstl
			jstl
			${jstl.version}
		

		
		
			mysql
			mysql-connector-java
			${mysql.connector.version}
		

		
		
			org.slf4j
			slf4j-api
			${slf4j.version}
		

		
			org.slf4j
			jcl-over-slf4j
			${slf4j.version}
		

		
			ch.qos.logback
			logback-classic
			${logback.version}
		

		
			javax.servlet
			servlet-api
			${servletapi.version}
			provided
		

	

3. Таблицы пользователей

Сценарий SQL для создания таблиц для хранения пользователя и роли пользователя.

CREATE  TABLE users (
  username VARCHAR(45) NOT NULL ,
  password VARCHAR(60) NOT NULL ,
  enabled TINYINT NOT NULL DEFAULT 1 ,
  PRIMARY KEY (username));

CREATE TABLE user_roles (
  user_role_id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(45) NOT NULL,
  role varchar(45) NOT NULL,
  PRIMARY KEY (user_role_id),
  UNIQUE KEY uni_username_role (role,username),
  KEY fk_username_idx (username),
  CONSTRAINT fk_username FOREIGN KEY (username) REFERENCES users (username));

INSERT INTO users(username,password,enabled)
VALUES ('mkyong','$2a$10$04TVADrR6/SPLBjsK0N30.Jf5fNjBugSACeGv1S69dZALR7lSov0y', true);
INSERT INTO users(username,password,enabled)
VALUES ('alex','$2a$10$04TVADrR6/SPLBjsK0N30.Jf5fNjBugSACeGv1S69dZALR7lSov0y', true);

INSERT INTO user_roles (username, role)
VALUES ('mkyong', 'ROLE_USER');
INSERT INTO user_roles (username, role)
VALUES ('mkyong', 'ROLE_ADMIN');
INSERT INTO user_roles (username, role)
VALUES ('alex', 'ROLE_USER');

4. Модель пользователя + Отображение XML в режиме гибернации

Классы моделей и их XML-файл сопоставления.

package com.mkyong.users.model;

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

public class User {
	
	private String username;
	private String password;
	private boolean enabled;
	private Set userRole = new HashSet(0);
	
	//getter and setter methods
}
package com.mkyong.users.model;

public class UserRole{

	private Integer userRoleId;
	private User user;
	private String role;

	//getter and setter methods
}




    
        
            
            
        
        
            
        
        
            
        
        
            
                
            
            
        
    





    
        
            
            
        
        
            
        
        
            
        
    

5. Класс DAO

Создайте класс UserDao для загрузки пользователей из базы данных через режим гибернации.

package com.mkyong.users.dao;

import com.mkyong.users.model.User;

public interface UserDao {

	User findByUserName(String username);

}
package com.mkyong.users.dao;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.SessionFactory;

import com.mkyong.users.model.User;

public class UserDaoImpl implements UserDao {

	private SessionFactory sessionFactory;

	@SuppressWarnings("unchecked")
	public User findByUserName(String username) {

		List users = new ArrayList();

		users = getSessionFactory().getCurrentSession()
			.createQuery("from User where username=?")
			.setParameter(0, username).list();

		if (users.size() > 0) {
			return users.get(0);
		} else {
			return null;
		}

	}

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

}

6. Служба пользовательских данных

Создайте пользовательский Сервис UserDetailsService , загрузить пользователя из UserDao , затем создайте полномочия пользователя.

package com.mkyong.users.service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

import com.mkyong.users.dao.UserDao;
import com.mkyong.users.model.UserRole;

public class MyUserDetailsService implements UserDetailsService {

	private UserDao userDao;

	@Override
	public UserDetails loadUserByUsername(final String username) 
               throws UsernameNotFoundException {

		com.mkyong.users.model.User user = userDao.findByUserName(username);
		List authorities = buildUserAuthority(user.getUserRole());

		return buildUserForAuthentication(user, authorities);
		

	}

	// Converts com.mkyong.users.model.User user to
	// org.springframework.security.core.userdetails.User
	private User buildUserForAuthentication(com.mkyong.users.model.User user, 
		List authorities) {
		return new User(user.getUsername(), 
			user.getPassword(), user.isEnabled(), 
                        true, true, true, authorities);
	}

	private List buildUserAuthority(Set userRoles) {

		Set setAuths = new HashSet();

		// Build user's authorities
		for (UserRole userRole : userRoles) {
			setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
		}

		List Result = new ArrayList(setAuths);

		return Result;
	}

	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

}

7. XML-код безопасности Spring

Прочитайте комментарии, это должно быть понятно само собой.



	
	
		

		
		
		
		
		
		
	

	
		
			    
		
	




	
	

		
		
		
		
	

	
	
		
		
			
				orm/Users.hbm.xml
				orm/UserRoles.hbm.xml
			
		
		
		    
			
                           org.hibernate.dialect.MySQL5Dialect
                        
			true
			true
		    
		
	

	
		
	

	
		
	

	
	
		
	

	
	    
		
		
		
	    
	

	
	    
	    
	


Сделано.

8. Демонстрация проекта

Следующая демонстрационная видеозапись предназначена для входа в базу данных Spring Security с помощью JDBC учебника. Поскольку этот учебник генерирует тот же вывод, но использует режим гибернации для загрузки пользователей, поэтому демонстрационное видео используется повторно.

8.1 Доступ к странице, защищенной паролем: http://localhost:8080/spring-security-hibernate/admin, отобразится страница входа в систему.

8.2 Введите пользователя “mkyong” и пароль “123456”.

8.3 Попробуйте получить доступ /администратор страница с пользователем “alex” и паролем “123456”, отобразится страница 403.

Скачать Исходный Код

Рекомендации

  1. Весенний ОРМ – Гибернация
  2. Весенняя спячка4 LocalSessionФакториБеан javadoc
  3. Весенняя спячка3 LocalSessionФакториБеан javadoc
  4. Весеннее Управление Транзакциями
  5. Документация по гибернации ORM
  6. Форма безопасности Spring Для входа в систему с использованием базы данных с помощью JDBC
  7. Переход В Спящий Режим: Сеанс Для Текущего Потока Не Найден

Оригинал: “https://mkyong.com/spring-security/spring-security-hibernate-xml-example/”