From: Polin Wei
build.gradle
| buildscript { |
| ext { |
| springBootVersion = '2.0.4.RELEASE' |
| jjwtVersion = '0.9.0' |
| findbugsVersion='3.0.1' |
| bootstrapVersion = '3.3.7' |
| jqueryVersion = '3.3.1' |
| vueVersion ='2.5.13' |
| fontawesomeVersion = '5.2.0' |
| jspapiVersion = '2.3.3' |
| } |
| repositories { |
| mavenCentral() |
| } |
| dependencies { |
| classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| apply plugin: 'java' |
| apply plugin: 'eclipse' |
| apply plugin: 'org.springframework.boot' |
| apply plugin: 'io.spring.dependency-management' |
| |
| |
| bootJar { |
| baseName = 'myspring' |
| group = 'com.polinwei' |
| version = '0.0.1-SNAPSHOT' |
| } |
| |
| |
| sourceCompatibility = 1.8 |
| targetCompatibility = 1.8 |
| |
| |
| repositories { |
| mavenCentral() |
| maven { url "https://repo.spring.io/snapshot" } |
| maven { url "https://repo.spring.io/milestone" } |
| maven { url "https://code.lds.org/nexus/content/groups/main-repo"} |
| maven { url "http://maven.aliyun.com/nexus/content/repositories/central"} |
| } |
| |
| |
| dependencies { |
| compile("org.springframework.boot:spring-boot-starter-data-jpa") |
| compile("org.springframework.boot:spring-boot-starter-thymeleaf") |
| compile("org.springframework.boot:spring-boot-starter-freemarker") |
| compile("org.springframework.boot:spring-boot-starter-web") |
| compile("org.springframework.boot:spring-boot-starter-security") |
| compile("org.springframework.security:spring-security-taglibs") |
| compile("org.springframework.boot:spring-boot-devtools") |
| compile("org.hibernate.validator:hibernate-validator") |
| compile("javax.servlet.jsp:javax.servlet.jsp-api:${jspapiVersion}") |
| compile("org.springframework.session:spring-session-data-redis") |
| compile("org.springframework.boot:spring-boot-starter-data-redis") |
| runtime("mysql:mysql-connector-java") |
| compileOnly("org.projectlombok:lombok") |
| compile("com.maxmind.geoip2:geoip2:2.12.0") |
| compile("io.jsonwebtoken:jjwt:${jjwtVersion}") |
| compile("com.google.code.findbugs:findbugs:${findbugsVersion}") |
| compile("org.webjars:bootstrap:${bootstrapVersion}") |
| compile("org.webjars:jquery:${jqueryVersion}") |
| compile("org.webjars:vue:${vueVersion}") |
| compile("org.webjars:font-awesome:${fontawesomeVersion}") |
| compile("org.webjars.bowergithub.lipis:flag-icon-css:3.1.0") |
| compileOnly("org.springframework.boot:spring-boot-configuration-processor") |
| testCompile("org.springframework.boot:spring-boot-starter-test") |
| testCompile("org.springframework.security:spring-security-test") |
| } |
model: Authority.java
| |
| |
| |
| @Entity |
| @Table(name = "authority", uniqueConstraints = @UniqueConstraint(columnNames = "name")) |
| public class Authority implements java.io.Serializable { |
| |
| private Long id; |
| private String name; |
| @Size(min=2, max=30 , message = "{Size}") |
| private String description; |
| private Set users = new HashSet(0); |
| |
| public Authority() { |
| } |
| |
| public Authority(String name, String description) { |
| this.name = name; |
| this.description = description; |
| } |
| |
| public Authority(String name, String description, Set users) { |
| this.name = name; |
| this.description = description; |
| this.users = users; |
| } |
| |
| @Id |
| @GeneratedValue(strategy = IDENTITY) |
| |
| @Column(name = "id", unique = true, nullable = false) |
| public Long getId() { |
| return this.id; |
| } |
| |
| public void setId(Long id) { |
| this.id = id; |
| } |
| |
| @Column(name = "name", unique = true, nullable = false, length = 50) |
| public String getName() { |
| return this.name; |
| } |
| |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| @Column(name = "description", nullable = false, length = 100) |
| public String getDescription() { |
| return this.description; |
| } |
| |
| public void setDescription(String description) { |
| this.description = description; |
| } |
| |
| @ManyToMany(fetch = FetchType.LAZY) |
| @JoinTable(name = "user_authority", joinColumns = { |
| @JoinColumn(name = "authority_id", nullable = false, updatable = false) }, inverseJoinColumns = { |
| @JoinColumn(name = "user_id", nullable = false, updatable = false) }) |
| @JsonBackReference |
| public Set getUsers() { |
| return this.users; |
| } |
| |
| public void setUsers(Set users) { |
| this.users = users; |
| } |
| |
| } |
Control: AuthorityController.java
| @Controller |
| @RequestMapping(path = "/security") |
| public class AuthorityController { |
| |
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); |
| |
| @Autowired |
| private AuthorityRepository authorityRepository; |
| |
| public void init(Model model) { |
| model.addAttribute("programName", "Authority"); |
| } |
| |
| @RequestMapping("authority") |
| public String crudAuthority(Model model) { |
| init(model); |
| model.addAttribute("authority", new Authority()); |
| model.addAttribute("authorityList",authorityRepository.findAll()); |
| return "/security/authority"; |
| } |
| |
| |
| |
| |
| |
| |
| |
| @RequestMapping(value= {"authorityEdit","authorityEdit/{id}"} , method = RequestMethod.GET) |
| public String crudAuthority(Model model, @PathVariable( required = false , name="id") Long id) { |
| init(model); |
| if (Objects.isNull(id)) { |
| model.addAttribute("authority", new Authority()); |
| } else { |
| model.addAttribute("authority", authorityRepository.findById(id).get()); |
| } |
| return "/security/authority"; |
| } |
| |
| |
| |
| |
| |
| |
| |
| @RequestMapping(value="authorityEdit" , method = RequestMethod.POST) |
| public String crudAuthority(Model model, @Valid Authority authority, BindingResult bindingResult) { |
| init(model); |
| if (bindingResult.hasErrors()) { |
| return "/security/authority"; |
| } |
| |
| authorityRepository.save(authority); |
| model.addAttribute("authority", new Authority()); |
| return "/security/authority"; |
| } |
| |
| |
| |
| |
| |
| |
| |
| @RequestMapping(value="authorityDelete/{id}" , method = RequestMethod.GET) |
| public String authorityDelete(Model model, @PathVariable( required = true, name = "id") Long id) { |
| init(model); |
| authorityRepository.deleteById(id); |
| model.addAttribute("authority", new Authority()); |
| return "/security/authority"; |
| } |
| |
| } |
加入了@Valid注解 是為了實現JSR-303的驗證。
(繼續閱讀...)