判官007 发表于 2018-11-22 10:34:50

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

  教学:
  一、SpringMVC+Apache Shiro+JPA(hibernate)整合配置
  (1)新建Web工程,且导入所需Jar包。(以下截图为真实项目中删减后保留,如有不需要的JAR包,请自行删除)
http://images.cnitblog.com/blog/479036/201306/11200034-f27bae7763a14ca5b345d5da263c18a0.jpg
  (2)配置web.xml,applicationContext.xml, spring-mvc.xml, log4j.properties
  web.xml
  
  
  
  contextConfigLocation
  classpath:applicationContext.xml
  
  
  
  org.springframework.web.context.ContextLoaderListener
  
  
  
  
  hibernateFilter
  
  org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
  
  
  
  hibernateFilter
  /*
  
  
  
  shiroFilter
  
  org.springframework.web.filter.DelegatingFilterProxy
  
  
  targetFilterLifecycle
  true
  
  
  
  shiroFilter
  /*
  
  
  
  webAppRootKey
  spring_springmvc_jpa.root
  
  
  log4jConfigLocation
  classpath:log4j.properties
  
  
  
  org.springframework.web.util.Log4jConfigListener
  
  
  
  
  characterEncodingFilter
  
  org.springframework.web.filter.CharacterEncodingFilter
  
  
  encoding
  UTF-8
  
  
  forceEncoding
  true
  
  
  
  characterEncodingFilter
  /*
  
  
  HiddenHttpMethodFilter
  
  org.springframework.web.filter.HiddenHttpMethodFilter
  
  
  
  HiddenHttpMethodFilter
  dispatcherServlet
  
  
  
  
  org.springframework.web.util.IntrospectorCleanupListener
  
  
  
  
  dispatcherServlet
  
  org.springframework.web.servlet.DispatcherServlet
  
  
  contextConfigLocation
  classpath:spring-mvc.xml
  
  1
  
  
  
  dispatcherServlet
  /
  
  
  
  JSPConfiguration
  *.jsp
  true
  utf-8
  false
  
  
  
  login.jsp
  
  
  applicationContext.xml
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  org.hibernate.dialect.MySQL5Dialect
  
  
  com.mysql.jdbc.Driver
  
  3
  18
  10
  update
  true
  false
  none
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  /login = anon
  /validateCode = anon
  /** = authc
  
  
  
  
  spring-mvc.xml
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  text/html;
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  /system/error
  
  
  
  
  
  jdbc.properties
  
  jdbc.driverClassName=com.mysql.jdbc.Driver
  jdbc.url=jdbc:mysql://localhost:3306/shirodemo?useUnicode=true&characterEncoding=UTF-8
  jdbc.username=root
  jdbc.password=root
  BoneCP.idleConnectionTestPeriod=60
  BoneCP.idleMaxAge=60
  BoneCP.maxConnectionsPerPartition=5
  BoneCP.minConnectionsPerPartition=1
  BoneCP.partitionCount=3
  BoneCP.acquireIncrement=2
  BoneCP.statementsCacheSize=0
  BoneCP.releaseHelperThreads=3
  log4j.properties
  
  log4j.rootLogger=INFO,stdout,file
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  log4j.appender.stdout.Target=System.out
  log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
  log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
  log4j.appender.file.File=${spring_springmvc_jpa.root}/shirodemo.log
  log4j.appender.file.layout=org.apache.log4j.PatternLayout
  log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
  log4j.logger.org.hibernate.tool.hbm2ddl=info
  (3)建立JavaBean,User.java,Role.java,Permisson.java
  User.java
  
  package org.shiro.demo.entity;
  import java.io.Serializable;
  import java.util.Collection;
  import javax.persistence.CascadeType;
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
  import javax.persistence.Id;
  import javax.persistence.JoinColumn;
  import javax.persistence.JoinTable;
  import javax.persistence.ManyToMany;
  import javax.persistence.Table;
  import org.codehaus.jackson.annotate.JsonIgnore;
  @Entity
  @Table(name = "CMSUser")

  public>  private static final long serialVersionUID = 7419229779731522702L;
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "userid")

  private Long>  @Column(length = 50, unique = true)
  private String account;
  @Column(length = 100)
  @JsonIgnore    //springmvc生成json不包含此字段
  private String password;
  @Column(length = 50)
  private String nickname;
  @ManyToMany(cascade = {CascadeType.PERSIST })
  @JsonIgnore
  @JoinTable(name = "CMSUserRole", joinColumns = { @JoinColumn(name = "userid", referencedColumnName = "userid") },
  inverseJoinColumns = { @JoinColumn(name = "roleid", referencedColumnName = "roleid") })
  private Collection roles;
  public Long getId() {

  return>  }

  public void setId(Long>
  this.id =>  }
  public String getAccount() {
  return account;
  }
  public void setAccount(String account) {
  this.account = account;
  }
  public String getPassword() {
  return password;
  }
  public void setPassword(String password) {
  this.password = password;
  }
  public String getNickname() {
  return nickname;
  }
  public void setNickname(String nickname) {
  this.nickname = nickname;
  }
  public Collection getRoles() {
  return roles;
  }
  public void setRoles(Collection roles) {
  this.roles = roles;
  }
  /**
  * 本函数输出将作为默认的输出.
  */
  public String toString() {
  return account;
  }
  }
  Role.java
  
  package org.shiro.demo.entity;
  import java.io.Serializable;
  import java.util.Collection;
  import javax.persistence.Basic;
  import javax.persistence.CascadeType;
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.FetchType;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
  import javax.persistence.Id;
  import javax.persistence.JoinColumn;
  import javax.persistence.JoinTable;
  import javax.persistence.ManyToMany;
  import javax.persistence.Table;
  @Entity
  @Table(name = "CMSRole")

  public>  private static final long serialVersionUID = 6177417450707400228L;
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name="roleid")

  private Long>  @Column(length=50)
  private String name;
  @Column(length=50)
  private String description;
  @ManyToMany(mappedBy = "roles")
  @Basic(fetch = FetchType.LAZY)
  private Collection users;
  @ManyToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE}, fetch = FetchType.LAZY)
  @JoinTable(name = "CMSRolePms",
  joinColumns = { @JoinColumn(name = "roleid", updatable = false) },
  inverseJoinColumns = { @JoinColumn(name = "pmsid", updatable = false) })
  private Collection pmss;
  public Long getId() {

  return>  }

  public void setId(Long>
  this.id =>  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getDescription() {
  return description;
  }
  public void setDescription(String description) {
  this.description = description;
  }
  public Collection getUsers() {
  return users;
  }
  public void setUsers(Collection users) {
  this.users = users;
  }
  public Collection getPmss() {
  return pmss;
  }
  public void setPmss(Collection pmss) {
  this.pmss = pmss;
  }
  }
  Permisson.java
  
  package org.shiro.demo.entity;
  import java.io.Serializable;
  import java.util.Collection;
  import javax.persistence.CascadeType;
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.FetchType;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
  import javax.persistence.Id;
  import javax.persistence.JoinColumn;
  import javax.persistence.ManyToMany;
  import javax.persistence.ManyToOne;
  import javax.persistence.OneToMany;
  import javax.persistence.Table;
  @Entity
  @Table(name="CMSPermission")

  public>  private static final long serialVersionUID = -8792590494605747957L;
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name="pmsid")

  private Long>  @Column(length=50)
  private String name;
  @Column(length=100)
  private String description;
  @Column(length=50)
  private String permission;
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "parentid")
  private Permission parent;
  @OneToMany(mappedBy = "parent",fetch = FetchType.LAZY,cascade={CascadeType.ALL})
  private Collection children;
  @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "pmss")
  private Collection roles;
  public Long getId() {

  return>  }

  public void setId(Long>
  this.id =>  }
  public String getName() {
  return name;
  }
  public void setName(String name) {
  this.name = name;
  }
  public String getDescription() {
  return description;
  }
  public void setDescription(String description) {
  this.description = description;
  }
  public String getPermission() {
  return permission;
  }
  public void setPermission(String permission) {
  this.permission = permission;
  }
  public Permission getParent() {
  return parent;
  }
  public void setParent(Permission parent) {
  this.parent = parent;
  }
  public Collection getChildren() {
  return children;
  }
  public void setChildren(Collection children) {
  this.children = children;
  }
  public Collection getRoles() {
  return roles;
  }
  public void setRoles(Collection roles) {
  this.roles = roles;
  }
  }
  

页: [1]
查看完整版本: SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置