设为首页 收藏本站
查看: 841|回复: 0

[经验分享] SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

[复制链接]

尚未签到

发表于 2018-11-22 10:34:50 | 显示全部楼层 |阅读模式
  教学:
  一、SpringMVC+Apache Shiro+JPA(hibernate)整合配置
  (1)新建Web工程,且导入所需Jar包。(以下截图为真实项目中删减后保留,如有不需要的JAR包,请自行删除)

  (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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-638125-1-1.html 上篇帖子: apache 服务无法启动 下篇帖子: Apache Spark源码走读:如何进行代码跟读
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表