1.springboot生成項目css
PS : 進入項目,輸入gradle build,生成build文件夾; 而後進入libs有jar,使用java jar進行運行項目html
PS: 這個項目沒有準守restful APijava
PS: 順序掃描效率不高web
全文搜索就是把無規則的再次組織造成有規律數據,再進行建立索引。spring
PS: 很是相似於查字典,能夠按照順序一個一個找,也能夠按照拼音找瀏覽器
------------------------------------------------------------------------安全
PS:索引能夠劃分紅 多個分片(由於索引的數據量太大,因此繼續劃分), 一個分片又能夠劃分紅多個副本springboot
PS: 近實時, 就是添加一個東西之後,不會立馬刷入磁盤,等個幾s才能查的到restful
PS: 類型,對索引進行分類app
PS: 文檔是進行索引的基本單位,每一個索引都有一個文檔與之對應
-------------------------------------------------------------------------------------------------------------------
PS : 安裝啓動es
PS: 和jpa相似 會根據名字查詢
PS : 這個normalize用來解決跨瀏覽器的一致性
-----------------------------------
PS: 如今測試一個只根據 超小屏幕 和 中屏幕 開發的項目
PS: 這是中屏幕的效果
------------------------實戰後臺
package com.waylau.spring.boot.blog.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; /** * Spring Security 配置類. * * @since 1.0.0 2017年3月8日 * @author <a href="https://waylau.com">Way Lau</a> */ @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) // 啓用方法安全設置 public class SecurityConfig extends WebSecurityConfigurerAdapter { private static final String KEY = "waylau.com"; @Autowired private UserDetailsService userDetailsService; @Autowired private PasswordEncoder passwordEncoder; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); // 使用 BCrypt 加密 } @Bean public AuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(); authenticationProvider.setUserDetailsService(userDetailsService); authenticationProvider.setPasswordEncoder(passwordEncoder); // 設置密碼加密方式 return authenticationProvider; } /** * 自定義配置, !!!!必須重寫這個方法 */ @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/css/**", "/js/**", "/fonts/**", "/index").permitAll() // 均可以訪問 .antMatchers("/h2-console/**").permitAll() // 均可以訪問 .antMatchers("/admins/**").hasRole("ADMIN") // 須要相應的角色才能訪問, 只有admin才能訪問/admins/** .and() .formLogin() //基於 Form 表單登陸驗證 .loginPage("/login").failureUrl("/login-error") // 自定義登陸界面 .and().rememberMe().key(KEY) // 啓用 remember me .and().exceptionHandling().accessDeniedPage("/403"); // 處理異常,拒絕訪問就重定向到 403 頁面 http.csrf().ignoringAntMatchers("/h2-console/**"); // 禁用 H2 控制檯的 CSRF 防禦 http.headers().frameOptions().sameOrigin(); // 容許來自同一來源的H2 控制檯的請求 } /** * 認證信息管理 * @param auth * @throws Exception */ @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService); auth.authenticationProvider(authenticationProvider()); } }
package com.waylau.spring.boot.blog.controller; import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import com.waylau.spring.boot.blog.domain.Authority; import com.waylau.spring.boot.blog.domain.User; import com.waylau.spring.boot.blog.service.AuthorityService; import com.waylau.spring.boot.blog.service.UserService; /** * 主頁控制器. * * @since 1.0.0 2017年3月8日 * @author <a href="https://waylau.com">Way Lau</a> */ @Controller public class MainController { private static final Long ROLE_USER_AUTHORITY_ID = 2L; @Autowired private UserService userService; @Autowired private AuthorityService authorityService; @GetMapping("/") public String root() { return "redirect:/index"; } @GetMapping("/index") public String index() { return "redirect:/blogs"; } /** * 獲取登陸界面 * @return */ @GetMapping("/login") public String login() { return "login"; } @GetMapping("/login-error") public String loginError(Model model) { model.addAttribute("loginError", true); model.addAttribute("errorMsg", "登錄失敗,帳號或者密碼錯誤!"); return "login"; } @GetMapping("/register") public String register() { return "register"; } /** * 註冊用戶 * @param user * @param result * @param redirect * @return */ @PostMapping("/register") public String registerUser(User user) { List<Authority> authorities = new ArrayList<>(); authorities.add(authorityService.getAuthorityById(ROLE_USER_AUTHORITY_ID)); user.setAuthorities(authorities); userService.saveUser(user); return "redirect:/login"; } @GetMapping("/search") public String search() { return "search"; } }
--------------------------前臺