Báze pro DAO a business logiku, nastavení Hibernate, nastavení security.
commit
2ca878f52d
@ -0,0 +1,282 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>info.bukova</groupId>
|
||||
<artifactId>isspst</artifactId>
|
||||
<name>isspst</name>
|
||||
<packaging>war</packaging>
|
||||
<version>1.0.0-BUILD-SNAPSHOT</version>
|
||||
<properties>
|
||||
<java-version>1.6</java-version>
|
||||
<zk.version>7.0.1</zk.version>
|
||||
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
|
||||
<org.aspectj-version>1.6.10</org.aspectj-version>
|
||||
<org.slf4j-version>1.6.6</org.slf4j-version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>ZK CE</id>
|
||||
<name>ZK CE Repository</name>
|
||||
<url>http://mavensync.zkoss.org/maven2</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>zkmaven</id>
|
||||
<name>ZK Maven Plugin Repository</name>
|
||||
<url>http://mavensync.zkoss.org/maven2/</url>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<dependencies>
|
||||
<!-- Spring -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
<exclusions>
|
||||
<!-- Exclude Commons Logging in favor of SLF4j -->
|
||||
<exclusion>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-orm</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-core</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-web</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-config</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
</dependency>
|
||||
<!-- <dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-jpa</artifactId>
|
||||
<version>${org.springframework-version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.hibernate.javax.persistence</groupId>
|
||||
<artifactId>hibernate-jpa-2.0-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency> -->
|
||||
|
||||
<!-- AspectJ -->
|
||||
<dependency>
|
||||
<groupId>org.aspectj</groupId>
|
||||
<artifactId>aspectjrt</artifactId>
|
||||
<version>${org.aspectj-version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Logging -->
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${org.slf4j-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>jcl-over-slf4j</artifactId>
|
||||
<version>${org.slf4j-version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<version>${org.slf4j-version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.15</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>javax.mail</groupId>
|
||||
<artifactId>mail</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>javax.jms</groupId>
|
||||
<artifactId>jms</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>com.sun.jdmk</groupId>
|
||||
<artifactId>jmxtools</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>com.sun.jmx</groupId>
|
||||
<artifactId>jmxri</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cglib</groupId>
|
||||
<artifactId>cglib</artifactId>
|
||||
<version>2.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- @Inject -->
|
||||
<dependency>
|
||||
<groupId>javax.inject</groupId>
|
||||
<artifactId>javax.inject</artifactId>
|
||||
<version>1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Servlet -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
<version>2.5</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet.jsp</groupId>
|
||||
<artifactId>jsp-api</artifactId>
|
||||
<version>2.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>jstl</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- DB -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>5.1.21</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-dbcp</groupId>
|
||||
<artifactId>commons-dbcp</artifactId>
|
||||
<version>1.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Hibernate -->
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
<version>4.2.8.Final</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>4.3.0.Final</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- ZK -->
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zkbind</artifactId>
|
||||
<version>${zk.version}</version>
|
||||
</dependency>
|
||||
<!-- <dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zkmax</artifactId>
|
||||
<version>${zk.version}</version>
|
||||
</dependency> -->
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zul</artifactId>
|
||||
<version>${zk.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zkplus</artifactId>
|
||||
<version>${zk.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zhtml</artifactId>
|
||||
<version>${zk.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zkforge</groupId>
|
||||
<artifactId>ckez</artifactId>
|
||||
<version>3.6.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.zkoss.zk</groupId>
|
||||
<artifactId>zkspring-core</artifactId>
|
||||
<version>3.1</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!-- Test -->
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.7</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.9</version>
|
||||
<configuration>
|
||||
<additionalProjectnatures>
|
||||
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
|
||||
</additionalProjectnatures>
|
||||
<additionalBuildcommands>
|
||||
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
|
||||
</additionalBuildcommands>
|
||||
<downloadSources>true</downloadSources>
|
||||
<downloadJavadocs>true</downloadJavadocs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.5.1</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
<compilerArgument>-Xlint:all</compilerArgument>
|
||||
<showWarnings>true</showWarnings>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<configuration>
|
||||
<mainClass>org.test.int1.Main</mainClass>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,51 @@
|
||||
package info.bukova.isspst;
|
||||
|
||||
import info.bukova.isspst.data.User;
|
||||
import info.bukova.isspst.services.UserService;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
/**
|
||||
* Handles requests for the application home page.
|
||||
*/
|
||||
@Controller
|
||||
public class HomeController {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
* Simply selects the home view to render by returning its name.
|
||||
*/
|
||||
@RequestMapping(value = "/", method = RequestMethod.GET)
|
||||
public String home(Locale locale, Model model) {
|
||||
logger.info("Welcome home! The client locale is {}.", locale);
|
||||
|
||||
Date date = new Date();
|
||||
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
|
||||
|
||||
String formattedDate = dateFormat.format(date);
|
||||
|
||||
model.addAttribute("serverTime", formattedDate );
|
||||
|
||||
User user = new User();
|
||||
user.setUsername("pokus");
|
||||
|
||||
userService.add(user);
|
||||
|
||||
return "home";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package info.bukova.isspst.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.Query;
|
||||
|
||||
public interface BaseDao<T> {
|
||||
|
||||
public void add(T entity);
|
||||
public void delete(T entity);
|
||||
public void modify(T entity);
|
||||
public T getById(int id);
|
||||
public List<T> getAll();
|
||||
public Query getQuery(String query);
|
||||
public List<T> execQuery(String query);
|
||||
public String getTableName();
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package info.bukova.isspst.dao;
|
||||
|
||||
import info.bukova.isspst.data.Role;
|
||||
|
||||
public interface RoleDao extends BaseDao<Role> {
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package info.bukova.isspst.dao;
|
||||
|
||||
import info.bukova.isspst.data.User;
|
||||
|
||||
public interface UserDao extends BaseDao<User> {
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package info.bukova.isspst.dao.jpa;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import info.bukova.isspst.dao.BaseDao;
|
||||
|
||||
public abstract class BaseDaoJPA<T> implements BaseDao<T> {
|
||||
|
||||
private SessionFactory sessionFactory;
|
||||
|
||||
public void setSessionFactory(SessionFactory factory) {
|
||||
this.sessionFactory = factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(T entity) {
|
||||
sessionFactory.getCurrentSession().save(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(T entity) {
|
||||
sessionFactory.getCurrentSession().delete(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void modify(T entity) {
|
||||
sessionFactory.getCurrentSession().update(entity);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public T getById(int id) {
|
||||
Query q = sessionFactory.getCurrentSession().createQuery("from " + getTableName() + " e where ID = :id");
|
||||
q.setInteger("id", id);
|
||||
return (T) q.uniqueResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Query getQuery(String query) {
|
||||
return sessionFactory.getCurrentSession().createQuery(query);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<T> execQuery(String query) {
|
||||
return sessionFactory.getCurrentSession().createQuery(query).list();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<T> getAll() {
|
||||
return sessionFactory.getCurrentSession().createQuery("from " + getTableName()).list();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package info.bukova.isspst.dao.jpa;
|
||||
|
||||
import info.bukova.isspst.dao.RoleDao;
|
||||
import info.bukova.isspst.data.Role;
|
||||
|
||||
public class RoleDaoJPA extends BaseDaoJPA<Role> implements RoleDao {
|
||||
|
||||
@Override
|
||||
public String getTableName() {
|
||||
return "ROLE";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package info.bukova.isspst.dao.jpa;
|
||||
|
||||
import info.bukova.isspst.dao.UserDao;
|
||||
import info.bukova.isspst.data.User;
|
||||
|
||||
public class UserDaoJPA extends BaseDaoJPA<User> implements UserDao {
|
||||
|
||||
|
||||
@Override
|
||||
public String getTableName() {
|
||||
return "USER";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface DataModel {
|
||||
|
||||
public void setId(int id);
|
||||
public int getId();
|
||||
public void setCreated(Date created);
|
||||
public Date getCreated();
|
||||
public void setModified(Date modified);
|
||||
public Date getModified();
|
||||
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
|
||||
@Entity
|
||||
@Table(name="ROLE")
|
||||
public class Role implements GrantedAuthority, DataModel {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5677876140880991163L;
|
||||
|
||||
@Id
|
||||
@Column(name="ID")
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
@Column(name="AUTHORITY")
|
||||
private String authority;
|
||||
@Column(name="DESCRIPTION")
|
||||
private String description;
|
||||
@Column(name="CREATED")
|
||||
private Date created;
|
||||
@Column(name="MODIFIED")
|
||||
private Date modified;
|
||||
|
||||
@Override
|
||||
public String getAuthority() {
|
||||
return authority;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public void setAuthority(String authority) {
|
||||
this.authority = authority;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public void setCreated(Date created) {
|
||||
this.created = created;
|
||||
}
|
||||
|
||||
public Date getModified() {
|
||||
return modified;
|
||||
}
|
||||
|
||||
public void setModified(Date modified) {
|
||||
this.modified = modified;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,123 @@
|
||||
package info.bukova.isspst.data;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.MapKeyColumn;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
@Entity
|
||||
@Table(name="USER")
|
||||
public class User implements UserDetails, DataModel {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 5421234421833765433L;
|
||||
|
||||
@Id
|
||||
@Column(name="ID")
|
||||
@GeneratedValue
|
||||
private int id;
|
||||
@Column(name="USERNAME")
|
||||
private String username;
|
||||
@Column(name="PASSWORD")
|
||||
private String password;
|
||||
@Column(name="ENABLED")
|
||||
private boolean enabled;
|
||||
@OneToMany @JoinTable(name="USER_ROLE")
|
||||
@MapKeyColumn(name="ROLE_ID")
|
||||
private List<Role> authorities;
|
||||
@Column(name="CREATED")
|
||||
private Date created;
|
||||
@Column(name="MODIFIED")
|
||||
private Date modified;
|
||||
|
||||
@Override
|
||||
public List<Role> getAuthorities() {
|
||||
return authorities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonLocked() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCredentialsNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public void setAuthorities(List<Role> authorities) {
|
||||
this.authorities = authorities;
|
||||
}
|
||||
|
||||
public void addAuthority(Role role) {
|
||||
this.authorities.add(role);
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public void setCreated(Date created) {
|
||||
this.created = created;
|
||||
}
|
||||
|
||||
public Date getModified() {
|
||||
return modified;
|
||||
}
|
||||
|
||||
public void setModified(Date modified) {
|
||||
this.modified = modified;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import info.bukova.isspst.dao.BaseDao;
|
||||
import info.bukova.isspst.data.DataModel;
|
||||
|
||||
public abstract class AbstractService<T extends DataModel> implements Service<T> {
|
||||
|
||||
protected BaseDao<T> dao;
|
||||
|
||||
public void setDao(BaseDao<T> dao) {
|
||||
this.dao = dao;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void add(T entity) {
|
||||
entity.setCreated(new Date());
|
||||
dao.add(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(T entity) {
|
||||
entity.setModified(new Date());
|
||||
dao.modify(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(T entity) {
|
||||
dao.delete(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> getAll() {
|
||||
return dao.getAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<T> execQuery(String query) {
|
||||
return dao.execQuery(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public T selectSingle(String query) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import info.bukova.isspst.data.Role;
|
||||
|
||||
public interface RoleService extends Service<Role> {
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import info.bukova.isspst.data.Role;
|
||||
|
||||
public class RoleServiceImpl extends AbstractService<Role> implements RoleService {
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface Service<T> {
|
||||
|
||||
public void add(T entity);
|
||||
public void update(T entity);
|
||||
public void delete(T entity);
|
||||
public List<T> getAll();
|
||||
public List<T> execQuery(String query);
|
||||
public T selectSingle(String query);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import info.bukova.isspst.data.User;
|
||||
|
||||
public interface UserService extends Service<User> {
|
||||
|
||||
public void setPassword(User user, String password);
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package info.bukova.isspst.services;
|
||||
|
||||
import org.hibernate.Query;
|
||||
import org.springframework.security.authentication.encoding.PasswordEncoder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import info.bukova.isspst.data.User;
|
||||
|
||||
public class UserServiceImpl extends AbstractService<User> implements UserService, UserDetailsService {
|
||||
|
||||
private PasswordEncoder encoder;
|
||||
|
||||
public void setEncoder(PasswordEncoder encoder) {
|
||||
this.encoder = encoder;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public UserDetails loadUserByUsername(String username)
|
||||
throws UsernameNotFoundException {
|
||||
|
||||
Query q = dao.getQuery("from User user where user.username = :username");
|
||||
q.setString("username", username);
|
||||
User u = (User) q.uniqueResult();
|
||||
|
||||
if (u == null)
|
||||
throw new UsernameNotFoundException("User " + username + " not found");
|
||||
|
||||
return u;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassword(User user, String password) {
|
||||
user.setPassword(encoder.encodePassword(password, user.getUsername()));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE hibernate-configuration PUBLIC
|
||||
"-//Hibernate/Hibernate Configuration DTD//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
|
||||
|
||||
<hibernate-configuration>
|
||||
<session-factory>
|
||||
<mapping class="info.bukova.isspst.data.User"></mapping>
|
||||
<mapping class="info.bukova.isspst.data.Role"></mapping>
|
||||
</session-factory>
|
||||
</hibernate-configuration>
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
|
||||
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||
|
||||
<!-- Appenders -->
|
||||
<appender name="console" class="org.apache.log4j.ConsoleAppender">
|
||||
<param name="Target" value="System.out" />
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<!-- Application Loggers -->
|
||||
<logger name="info.bukova.isspst">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<!-- 3rdparty Loggers -->
|
||||
<logger name="org.springframework.core">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.beans">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.context">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.web">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<!-- Root Logger -->
|
||||
<root>
|
||||
<priority value="warn" />
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
</log4j:configuration>
|
@ -0,0 +1,5 @@
|
||||
jdbc.driverClassName=com.mysql.jdbc.Driver
|
||||
jdbc.dialect=org.hibernate.dialect.MySQLDialect
|
||||
jdbc.databaseurl=jdbc:mysql://127.0.0.1:3306/isspst
|
||||
jdbc.username=root
|
||||
jdbc.password=xsacfgd
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
|
||||
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.xsd">
|
||||
|
||||
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
|
||||
|
||||
<!-- Enables the Spring MVC @Controller programming model -->
|
||||
<annotation-driven />
|
||||
|
||||
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
|
||||
<resources mapping="/resources/**" location="/resources/" />
|
||||
|
||||
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
|
||||
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
|
||||
<beans:property name="prefix" value="/WEB-INF/views/" />
|
||||
<beans:property name="suffix" value=".jsp" />
|
||||
</beans:bean>
|
||||
|
||||
<context:component-scan base-package="info.bukova.isspst" />
|
||||
|
||||
|
||||
|
||||
</beans:beans>
|
@ -0,0 +1,91 @@
|
||||
<?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:p="http://www.springframework.org/schema/p"
|
||||
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||
xmlns:aop="http://www.springframework.org/schema/aop"
|
||||
xmlns:security="http://www.springframework.org/schema/security"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
|
||||
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
|
||||
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
|
||||
|
||||
<!-- Root Context: defines shared resources visible to all other web components -->
|
||||
|
||||
<context:annotation-config />
|
||||
<context:component-scan base-package="info.bukova.isspst,org.zkoss.spring.beans.zkcomponents"></context:component-scan>
|
||||
|
||||
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
|
||||
id="propertyConfigurer"
|
||||
p:location="/WEB-INF/jdbc.properties"/>
|
||||
|
||||
<!-- Database -->
|
||||
<bean id="dataSource"
|
||||
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
|
||||
p:driverClassName="${jdbc.driverClassName}"
|
||||
p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
|
||||
p:password="${jdbc.password}"></bean>
|
||||
|
||||
<bean id="sessionFactory"
|
||||
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
|
||||
<property name="dataSource" ref="dataSource"></property>
|
||||
<property name="configLocation">
|
||||
<value>classpath:hibernate.cfg.xml</value>
|
||||
</property>
|
||||
<property name="hibernateProperties">
|
||||
<props>
|
||||
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
|
||||
<prop key="hibernate.show_sql">true</prop>
|
||||
<prop key="hibernate.hbm2ddl.auto">create</prop>
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<tx:annotation-driven transaction-manager="transactionManager"/>
|
||||
<bean id="transactionManager"
|
||||
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
|
||||
<property name="sessionFactory" ref="sessionFactory"></property>
|
||||
</bean>
|
||||
|
||||
<!-- Security -->
|
||||
<security:http auto-config="true">
|
||||
<security:intercept-url pattern="/app/**" access="ROLE_USER"/>
|
||||
<security:intercept-url pattern="/api/remote/**" access="ROLE_USER"/>
|
||||
<security:form-login login-page="/login.zhtml"/>
|
||||
<security:http-basic/>
|
||||
<security:logout invalidate-session="true"/>
|
||||
</security:http>
|
||||
|
||||
<security:authentication-manager>
|
||||
<security:authentication-provider user-service-ref="userService">
|
||||
<security:password-encoder ref="passwordEncoder">
|
||||
<security:salt-source user-property="username"/>
|
||||
</security:password-encoder>
|
||||
</security:authentication-provider>
|
||||
</security:authentication-manager>
|
||||
|
||||
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
|
||||
<property name="targetClass" value="org.springframework.security.core.context.SecurityContextHolder"/>
|
||||
<property name="targetMethod" value="setStrategyName"/>
|
||||
<property name="arguments" value="MODE_INHERITABLETHREADLOCAL"/>
|
||||
</bean>
|
||||
|
||||
<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"/>
|
||||
|
||||
<!-- DAO -->
|
||||
<bean id="userDao" class="info.bukova.isspst.dao.jpa.UserDaoJPA">
|
||||
<property name="sessionFactory" ref="sessionFactory"/>
|
||||
</bean>
|
||||
|
||||
<bean id="roleDao" class="info.bukova.isspst.dao.jpa.RoleDaoJPA">
|
||||
<property name="sessionFactory" ref="sessionFactory"/>
|
||||
</bean>
|
||||
|
||||
<!-- Business logic -->
|
||||
<bean id="userService" class="info.bukova.isspst.services.UserServiceImpl">
|
||||
<property name="dao" ref="userDao"/>
|
||||
</bean>
|
||||
|
||||
</beans>
|
@ -0,0 +1,14 @@
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ page session="false" %>
|
||||
<html>
|
||||
<head>
|
||||
<title>Home</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>
|
||||
Hello world!
|
||||
</h1>
|
||||
|
||||
<P> The time on the server is ${serverTime}. </P>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,189 @@
|
||||
<?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">
|
||||
|
||||
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
|
||||
<context-param>
|
||||
<param-name>contextConfigLocation</param-name>
|
||||
<param-value>/WEB-INF/spring/root-context.xml</param-value>
|
||||
</context-param>
|
||||
|
||||
<listener>
|
||||
<listener-class>org.zkoss.spring.web.context.CoreContextListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- Creates the Spring Container shared by all Servlets and Filters -->
|
||||
<listener>
|
||||
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<!-- ZK -->
|
||||
<listener>
|
||||
<description>ZK listener for session cleanup</description>
|
||||
<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
|
||||
</listener>
|
||||
<servlet>
|
||||
<description>ZK loader for ZUML pages</description>
|
||||
<servlet-name>zkLoader</servlet-name>
|
||||
<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
|
||||
|
||||
<!-- Must. Specifies URI of the update engine (DHtmlUpdateServlet).
|
||||
It must be the same as <url-pattern> for the update engine.
|
||||
-->
|
||||
<init-param>
|
||||
<param-name>update-uri</param-name>
|
||||
<param-value>/zkau</param-value>
|
||||
</init-param>
|
||||
<!-- Optional. Specifies whether to compress the output
|
||||
of the ZK loader. It speeds up the transmission over slow Internet.
|
||||
However, if you configure a filter to post-processing the
|
||||
output, you might have to disable it.
|
||||
|
||||
Default: true
|
||||
<init-param>
|
||||
<param-name>compress</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
-->
|
||||
<!-- [Optional] Specifies the default log level: OFF, ERROR, WARNING,
|
||||
INFO, DEBUG and FINER. If not specified, the system default is used.
|
||||
<init-param>
|
||||
<param-name>log-level</param-name>
|
||||
<param-value>OFF</param-value>
|
||||
</init-param>
|
||||
-->
|
||||
<load-on-startup>1</load-on-startup><!-- Must -->
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>zkLoader</servlet-name>
|
||||
<url-pattern>*.zul</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet-mapping>
|
||||
<servlet-name>zkLoader</servlet-name>
|
||||
<url-pattern>*.zhtml</url-pattern>
|
||||
</servlet-mapping>
|
||||
<!-- [Optional] Uncomment it if you want to use richlets.
|
||||
<servlet-mapping>
|
||||
<servlet-name>zkLoader</servlet-name>
|
||||
<url-pattern>/zk/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
-->
|
||||
<servlet>
|
||||
<description>The asynchronous update engine for ZK</description>
|
||||
<servlet-name>auEngine</servlet-name>
|
||||
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
|
||||
|
||||
<!-- [Optional] Specifies whether to compress the output
|
||||
of the ZK loader. It speeds up the transmission over slow Internet.
|
||||
However, if your server will do the compression, you might have to disable it.
|
||||
|
||||
Default: true
|
||||
<init-param>
|
||||
<param-name>compress</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
-->
|
||||
<!-- [Optional] Specifies the AU extension for particular prefix.
|
||||
<init-param>
|
||||
<param-name>extension0</param-name>
|
||||
<param-value>/upload=com.my.MyUploader</param-value>
|
||||
</init-param>
|
||||
-->
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>auEngine</servlet-name>
|
||||
<url-pattern>/zkau/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Processes application requests -->
|
||||
<servlet>
|
||||
<servlet-name>appServlet</servlet-name>
|
||||
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
||||
<init-param>
|
||||
<param-name>contextConfigLocation</param-name>
|
||||
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>appServlet</servlet-name>
|
||||
<url-pattern>/</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>doc</extension>
|
||||
<mime-type>application/vnd.ms-word</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>gif</extension>
|
||||
<mime-type>image/gif</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>htm</extension>
|
||||
<mime-type>text/html</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>html</extension>
|
||||
<mime-type>text/html</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>jpeg</extension>
|
||||
<mime-type>image/jpeg</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>jpg</extension>
|
||||
<mime-type>image/jpeg</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>js</extension>
|
||||
<mime-type>text/javascript</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>pdf</extension>
|
||||
<mime-type>application/pdf</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>png</extension>
|
||||
<mime-type>image/png</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>txt</extension>
|
||||
<mime-type>text/plain</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>xls</extension>
|
||||
<mime-type>application/vnd.ms-excel</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>xml</extension>
|
||||
<mime-type>text/xml</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>zhtml</extension>
|
||||
<mime-type>text/html</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>zul</extension>
|
||||
<mime-type>text/html</mime-type>
|
||||
</mime-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>
|
||||
|
||||
<welcome-file-list>
|
||||
<welcome-file>index.zul</welcome-file>
|
||||
<welcome-file>index.zhtml</welcome-file>
|
||||
<welcome-file>index.html</welcome-file>
|
||||
<welcome-file>index.htm</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
</web-app>
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
|
||||
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
|
||||
|
||||
<!-- Appenders -->
|
||||
<appender name="console" class="org.apache.log4j.ConsoleAppender">
|
||||
<param name="Target" value="System.out" />
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<!-- Application Loggers -->
|
||||
<logger name="info.bukova.isspst">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<!-- 3rdparty Loggers -->
|
||||
<logger name="org.springframework.core">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.beans">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.context">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<logger name="org.springframework.web">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<!-- Root Logger -->
|
||||
<root>
|
||||
<priority value="info" />
|
||||
<appender-ref ref="console" />
|
||||
</root>
|
||||
|
||||
</log4j:configuration>
|
Loading…
Reference in New Issue