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' 代表這是一個Java專案,需要使用java外掛程式
* 如果想生成一個 `Intellij IDEA` 的工程,類似的如果要生成
* eclipse工程,就寫 apply plugin: 'eclipse'
* 同樣的我們要學的是Spring Boot,所以應用Spring Boot外掛程式
*/
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
// 在這個段落中你可以聲明編譯後的Jar檔資訊
bootJar {
baseName = 'myspring'
group = 'com.polinwei'
version = '0.0.1-SNAPSHOT'
}
// 在這個段落中你可以聲明原始檔案和目標編譯後的Java版本相容性
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") // Class 程式有更改時, 自動重啟
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/**
* Authority generated by hbm2java
*/
@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";
}
/**
* Get Authority Role from id
* @param model
* @param id
* @return
*/
@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";
}
/**
* Save Authority Role
* @param model
* @param authority
* @return
*/
@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";
}
/**
* Delete Authority Role
* @param model
* @param id
* @return
*/
@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的驗證。(繼續閱讀...)