spring boot +security+oauth認證伺服器和資源伺服器(基於註解實現)
部分程式碼是搬別人寫好、自己做了調整
一、認證伺服器配置
1.新建maven專案pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId >
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId >
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2.匯入sql指令碼(使用者與角色相關的sql)
-- ----------------------------
-- Table structure for rc_menu
-- ----------------------------
DROP TABLE IF EXISTS `rc_menu`;
CREATE TABLE `rc_menu` (
`id` varchar(64) NOT NULL,
`code` varchar(255) DEFAULT NULL COMMENT '選單編碼',
`p_code` varchar(255) DEFAULT NULL COMMENT '選單父編碼',
`p_id` varchar(255) DEFAULT NULL COMMENT '父選單ID',
`name` varchar(255) DEFAULT NULL COMMENT '名稱',
`url` varchar(255) DEFAULT NULL COMMENT '請求地址',
`is_menu` int(11) DEFAULT NULL COMMENT '是否是選單',
`level` int(11) DEFAULT NULL COMMENT '選單層級',
`sort` int(11) DEFAULT NULL COMMENT '選單排序',
`status` int(11) DEFAULT NULL,
`icon` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `FK_CODE` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of rc_menu
-- ----------------------------
INSERT INTO `rc_menu` VALUES ('000000000000000000', 'root', '0', '0', '系統根目錄', '', '1', '0', '1', '1', null, '2017-08-03 18:31:54', null);
INSERT INTO `rc_menu` VALUES ('893287144657780736', 'system', 'root', '000000000000000000', '系統設定', 'system', '1', '1', '10', '1', '', '2017-08-04 09:47:06', null);
INSERT INTO `rc_menu` VALUES ('893288715881807872', 'userList', 'system', '893287144657780736', '使用者管理', 'user/list', '1', '2', '1', '1', '', '2017-08-04 09:53:21', '2017-08-07 18:18:39');
INSERT INTO `rc_menu` VALUES ('893304960282787840', 'user/add', 'userList', '893288715881807872', '使用者新增', 'user/add', '0', '3', '1', '1', '', '2017-08-04 10:57:54', '2017-08-08 11:02:55');
INSERT INTO `rc_menu` VALUES ('894396523532517376', 'user/edit', 'userList', '893288715881807872', '使用者修改', 'user/edit', '0', '3', '1', '1', '', '2017-08-07 11:15:23', '2017-08-07 16:57:52');
INSERT INTO `rc_menu` VALUES ('894473486712438784', 'user/view', 'userList', '893288715881807872', '使用者檢視', 'user/View', '0', '3', '2', '1', '', '2017-08-07 16:21:12', null);
INSERT INTO `rc_menu` VALUES ('894473651837992960', 'user/delete', 'userList', '893288715881807872', '使用者刪除', 'user/delete', '0', '3', '4', '1', '', '2017-08-07 16:21:52', null);
INSERT INTO `rc_menu` VALUES ('894475142061621248', 'roleList', 'system', '893287144657780736', '角色管理', 'role/list', '1', '2', '2', '1', '', '2017-08-07 16:27:47', '2017-08-08 10:34:56');
INSERT INTO `rc_menu` VALUES ('894475827880656896', 'role/add', 'roleList', '894475142061621248', '角色新增', 'role/add', '0', '3', '1', '1', '', '2017-08-07 16:30:31', null);
INSERT INTO `rc_menu` VALUES ('894475985452269568', 'role/edit', 'roleList', '894475142061621248', '角色編輯', 'role/edit', '0', '3', '2', '1', '', '2017-08-07 16:31:08', null);
INSERT INTO `rc_menu` VALUES ('894476118730473472', 'role/delete', 'roleList', '894475142061621248', '角色刪除', 'role/delete', '0', '3', '2', '1', '', '2017-08-07 16:31:40', '2017-08-07 16:37:24');
INSERT INTO `rc_menu` VALUES ('894476276402749440', 'role/permission', 'roleList', '894475142061621248', '角色配權', 'role/permission', '0', '3', '3', '1', '', '2017-08-07 16:32:18', null);
INSERT INTO `rc_menu` VALUES ('894476950951690240', 'menu/list', 'system', '893287144657780736', '選單管理', 'menu/list', '1', '2', '2', '1', '', '2017-08-07 16:34:58', null);
INSERT INTO `rc_menu` VALUES ('894477107919323136', 'menu/add', 'menu/list', '894476950951690240', '選單新增', 'menu/add', '0', '3', '1', '1', '', '2017-08-07 16:35:36', null);
INSERT INTO `rc_menu` VALUES ('894477244926263296', 'menu/edit', 'menu/list', '894476950951690240', '選單編輯', 'menu/edit', '0', '3', '2', '1', '', '2017-08-07 16:36:08', null);
INSERT INTO `rc_menu` VALUES ('894477420512411648', 'menu/delete', 'menu/list', '894476950951690240', '選單刪除', 'menu/delete', '0', '3', '2', '1', '', '2017-08-07 16:36:50', null);
INSERT INTO `rc_menu` VALUES ('894477851082883072', 'apidoc', 'system', '893287144657780736', 'Api文件', 'swagger-ui.html', '1', '2', '9', '1', '', '2017-08-07 16:38:33', '2017-09-13 11:20:26');
INSERT INTO `rc_menu` VALUES ('894477995903811584', 'database/log', 'system', '893287144657780736', '資料庫日誌', 'druid', '1', '2', '10', '1', '', '2017-08-07 16:39:07', '2017-08-08 09:56:29');
INSERT INTO `rc_menu` VALUES ('894752734459199488', 'companyList', 'root', '000000000000000000', '公司管理', 'companyList', '1', '1', '1', '1', '', '2017-08-08 10:50:50', null);
INSERT INTO `rc_menu` VALUES ('903459378655395840', '/user/modify', 'userList', '893288715881807872', '密碼重置', '/user/modify', '1', '3', '2', '1', '', '2017-09-01 11:27:56', null);
-- ----------------------------
-- Table structure for rc_privilege
-- ----------------------------
DROP TABLE IF EXISTS `rc_privilege`;
CREATE TABLE `rc_privilege` (
`role_id` int(11) NOT NULL,
`menu_id` varchar(255) NOT NULL,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`role_id`,`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of rc_privilege
-- ----------------------------
INSERT INTO `rc_privilege` VALUES ('6', '893287144657780736', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '893288715881807872', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '893304960282787840', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '894396523532517376', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '894473486712438784', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '894473651837992960', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '894477851082883072', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('6', '894477995903811584', '2017-08-08 11:31:39');
INSERT INTO `rc_privilege` VALUES ('8', '893287144657780736', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '893288715881807872', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '893304960282787840', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894396523532517376', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894473486712438784', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894473651837992960', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894475142061621248', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894475827880656896', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894475985452269568', '2017-08-08 11:56:44');
INSERT INTO `rc_privilege` VALUES ('8', '894476118730473472', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894476276402749440', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894476950951690240', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894477107919323136', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894477244926263296', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894477420512411648', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894477851082883072', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894477995903811584', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894752734459199488', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('8', '894769217763540992', '2017-08-08 11:56:45');
INSERT INTO `rc_privilege` VALUES ('17', '893287144657780736', '2017-09-14 18:40:48');
INSERT INTO `rc_privilege` VALUES ('17', '894477851082883072', '2017-09-14 18:40:51');
INSERT INTO `rc_privilege` VALUES ('17', '894477995903811584', '2017-09-14 18:40:53');
INSERT INTO `rc_privilege` VALUES ('17', '894752734459199488', '2017-09-14 18:40:54');
-- ----------------------------
-- Table structure for rc_role
-- ----------------------------
DROP TABLE IF EXISTS `rc_role`;
CREATE TABLE `rc_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`value` varchar(255) DEFAULT NULL,
`tips` varchar(255) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`status` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_role_name` (`name`),
UNIQUE KEY `unique_role_value` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of rc_role
-- ----------------------------
INSERT INTO `rc_role` VALUES ('6', '管理員', 'admin', null, '2017-06-20 15:07:13', '2017-06-26 12:46:09', '1');
INSERT INTO `rc_role` VALUES ('8', '超級管理員', 'super', null, '2017-06-20 15:08:45', null, '1');
INSERT INTO `rc_role` VALUES ('17', '使用者', 'user', null, '2017-06-28 18:50:39', '2017-07-21 09:41:28', '1');
-- ----------------------------
-- Table structure for rc_user
-- ----------------------------
DROP TABLE IF EXISTS `rc_user`;
CREATE TABLE `rc_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`avatar` varchar(255) DEFAULT NULL,
`username` varchar(45) DEFAULT NULL,
`password` varchar(96) DEFAULT NULL,
`salt` varchar(45) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`sex` int(11) DEFAULT NULL,
`email` varchar(45) DEFAULT NULL,
`phone` varchar(45) DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_user_username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of rc_user
-- ----------------------------
INSERT INTO `rc_user` VALUES ('46', null, 'super', '$2a$10$cKRbR9IJktfmKmf/wShyo.5.J8IxO/7YVn8twuWFtvPgruAF8gtKq', null, '超級管理員', '2017-06-22 14:26:09', '1', null, null, '1', '2017-06-20 15:12:16', '2017-09-12 14:39:48');
INSERT INTO `rc_user` VALUES ('48', null, 'admin', '$2a$10$cKRbR9IJktfmKmf/wShyo.5.J8IxO/7YVn8twuWFtvPgruAF8gtKq', null, '管理員', null, '1', null, null, '1', '2017-06-26 17:31:41', null);
INSERT INTO `rc_user` VALUES ('49', null, 'yangxiufeng', '$2a$10$cKRbR9IJktfmKmf/wShyo.5.J8IxO/7YVn8twuWFtvPgruAF8gtKq', null, '秀秀1', null, '1', null, null, '1', '2017-08-30 10:34:59', '2017-09-18 16:10:22');
INSERT INTO `rc_user` VALUES ('50', null, 'test1', '$2a$10$cKRbR9IJktfmKmf/wShyo.5.J8IxO/7YVn8twuWFtvPgruAF8gtKq', null, 'test1', null, '1', null, null, '1', '2017-09-18 16:11:15', null);
INSERT INTO `rc_user` VALUES ('51', null, 'test2', '$2a$10$cKRbR9IJktfmKmf/wShyo.5.J8IxO/7YVn8twuWFtvPgruAF8gtKq', null, 'test2', null, '1', null, null, '1', '2017-09-21 17:09:51', null);
-- ----------------------------
-- Table structure for rc_user_role
-- ----------------------------
DROP TABLE IF EXISTS `rc_user_role`;
CREATE TABLE `rc_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`role_id` int(11) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`create_by` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of rc_user_role
-- ----------------------------
INSERT INTO `rc_user_role` VALUES ('1', '46', '8', '2017-09-11 13:02:45', null);
INSERT INTO `rc_user_role` VALUES ('2', '48', '6', '2017-09-11 13:02:56', null);
INSERT INTO `rc_user_role` VALUES ('3', '49', '17', '2017-09-11 13:03:12', null);
INSERT INTO `rc_user_role` VALUES ('19', '50', '6', '2017-09-12 14:20:20', '超級管理員');
INSERT INTO `rc_user_role` VALUES ('20', '50', '17', '2017-09-12 14:20:20', '超級管理員');
INSERT INTO `rc_user_role` VALUES ('22', '57', '8', '2017-09-18 16:34:58', '超級管理員');
INSERT INTO `rc_user_role` VALUES ('23', '57', '17', '2017-09-18 16:34:58', '超級管理員');
2.通過javaBean配置
AuthorizationServerConfig.java
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
/* @Autowired
private DataSource dataSource;*/
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
RedisTokenStore redisTokenStore(){
return new RedisTokenStore(redisConnectionFactory);
}
//token儲存資料庫
// @Bean
// public JdbcTokenStore jdbcTokenStore(){
// return new JdbcTokenStore(dataSource);
// }
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//clients.withClientDetails(clientDetails());
clients.inMemory().withClient("app").secret("app").scopes("app").authorizedGrantTypes("password","refresh_token");
}
/* @Bean
public ClientDetailsService clientDetails() {
return new JdbcClientDetailsService(dataSource);
}*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(redisTokenStore())
.userDetailsService(userDetailsService)
.authenticationManager(authenticationManager);
endpoints.tokenServices(defaultTokenServices());
}
/**
* <p>注意,自定義TokenServices的時候,需要設定@Primary,否則報錯,</p>
* @return
*/
@Primary
@Bean
public DefaultTokenServices defaultTokenServices(){
DefaultTokenServices tokenServices = new DefaultTokenServices();
tokenServices.setTokenStore(redisTokenStore());
tokenServices.setSupportRefreshToken(true);
//tokenServices.setClientDetailsService(clientDetails());
tokenServices.setAccessTokenValiditySeconds(60*60*12); // token有效期自定義設定,預設12小時
tokenServices.setRefreshTokenValiditySeconds(60 * 60 * 24 * 7);//預設30天,這裡修改
return tokenServices;
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("permitAll()");
security .checkTokenAccess("isAuthenticated()");
security.allowFormAuthenticationForClients();
}
}
ResourceServerConfig.java
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter{
@Override
public void configure(HttpSecurity http) throws Exception {
http.
csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(new Http401AuthenticationEntryPoint("Bearer realm=\"webrealm\""))
.and()
.authorizeRequests().anyRequest().authenticated()
.and()
.httpBasic();
}
}
WebSecurityConfig.java
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.csrf().disable()
.httpBasic();
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/favor.ioc");
}
}
UserDetailsServiceImpl.java
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@Autowired
相關推薦
spring boot +security+oauth認證伺服器和資源伺服器(基於註解實現)
部分程式碼是搬別人寫好、自己做了調整
一、認證伺服器配置
1.新建maven專案pom.xml
<dependencies>
<dependency>
<groupId>
Spring Boot內建Tomcat的靜態資源配置(在頁面中顯示專案外的某個圖片)
哇~我現在只想長長的舒一口氣,終於解決了 ~ 記錄一下好,下面開始我的第一個部落格,寫的不好還請大家見諒~最近老大讓我接觸一下spring boot,做一個簡單的專案。我的Spring Boot專
spring boot之支持http和https並行(http不跳轉)
http1 rri urn https ddp -s RoCE pro nbsp
首先需要去做個證書
yml配置文件中設置的是https監聽端口
server:
port: 10007
tomcat:
basedir: /dat
Spring Boot 2.0深度實踐之核心技術篇(雲盤分享)
第1章 系列總覽
總覽 Spring Boot 2.0 深度實踐系列課程的整體議程,包括 Spring Boot 三大核心特性(元件自動裝配、嵌入式Web容器、生產準備特性)、Web 應用(傳統 Servlet、Spring Web MVC、Spri
Spring Boot 2.0深度實踐之核心技術篇(雲盤下載)
第1章 系列總覽
總覽 Spring Boot 2.0 深度實踐系列課程的整體議程,包括 Spring Boot 三大核心特性(元件自動裝配、嵌入式Web容器、生產準備特性)、Web 應用(傳統 Servlet、Spring Web MVC、Spri
spring之AOP操作(基於aspectJ實現)--配置檔案和註解兩種方式實現
AOP概念
1 aop:面向切面(方面)程式設計,擴充套件功能不修改原始碼實現
2 AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼
3 aop底層使用動態代理實現
(1)第一種情況,有介面情況,使用動態代理建立介面實現類代理物
UDP的客戶端和伺服器端的例項(VC6.0實現)
伺服器端程式:
// UdpServer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
//使用win
在KVM中設定TLS證書認證TCP和VNC連線(填坑版)
本文是一篇散文
今天我們就來說一下KVM的安全配置
KVM的安全實現有很多型別
比如用SSH來連線KVM管理器
但是SSH這個方法有個不好的地方就是沒法對我們的VNC加密
或者就是我們這裡的TLS配置
既然涉及到了TLS肯定離不開證書
我們就先從證
Spring Boot 2.0深度實踐之核心技術篇(無密連結)
第1章 系列總覽
總覽 Spring Boot 2.0 深度實踐系列課程的整體議程,包括 Spring Boot 三大核心特性(元件自動裝配、嵌入式Web容器、生產準備特性)、Web 應用(傳統 Servlet、Spring Web MVC、Spri
使用idea + maven + +Spring Boot + mysql + MyBatis 快速搭建起SSM框架(SpringBoot 入門案例)
1.首先開啟idea開發工具,然後File->New->Project ,如下圖,下一步
預設配置,下一步
勾選以下三項,下一步
輸入專案名稱,Finish。。然後靜靜等待專案載入完成。。。
載入完成後生成如下目錄,其中DemoAppli
知識儲備:Spring中Bean的生命週期(基於註解版)
一:前言
在Spring專案中,通常配置Spring都是使用XML的形式進行配置,配置bean是通過<bean></bean>標籤將bean加入IOC容器中,但在Spring註解版中,可以通過Java程式碼進行配置,即建立一個java類在其類頭上標註@Configurat
Parallel Python(pp)分散式計算框架安裝和配置問題(基於win10系統)
“分散式計算”也是當今IT行業的一個非常火熱的名詞,大家都知道的谷歌機房,還有2013年諾貝爾物理學獎獲獎專案“希格斯波色子”,都利用了“分散式計算”來分擔一部分計算量從而提高計算效率,尤其在資料科學領域“分散式計算”起到舉足輕重的作用。
ParallelPy
Android 仿蘑菇街列表彈出和瀑布流 (ScrollView+RelativeLayout實現)
之前看到用線性佈局寫的瀑布流,覺得不大好,自己想了另外一種方案,
(最近發現用 網頁實現瀑布流 再用WebView載入才能完美實現效果)
原理使用RelativeLayout任意定位位置 核心方法
private void addViewByMargins(Re
Spring boot+Security OAuth2 自定義登入和授權頁面
Spring boot+Security OAuth2 自定義登入和授權頁面
1. 依賴
<!---------thymeleaf 模板引擎-------->
<dependency>
<groupId>org.springfra
(一)、spring boot security 認證--自定義登入實現
簡介
spring security主要分為兩部分,認證(authentication)和授權(authority)。
這一篇主要是認證部分,它由 ProviderManager(AuthenticationManager)實現。具體層次結構如下:
解決spring-boot-Admin的服務端和客戶端不在同一個伺服器的通訊問題
SpringbootAdmin能夠用來監控專案的執行情況,其具體介紹以及初步入門大家可以參考部落格:
按照這篇部落格的內容進行配置的話,相信大家已經看到了執行的結果,結果還是非常令人興奮的(對於初次接觸這個東東的人而言)。既然有了這麼好用的東西,肯定要實際使用。接下來的
十五、Spring Boot 環境變量讀取 和 屬性對象的綁定
bean database 環境 autoconf lac autowire 屬性 boot title 凡是被spring管理的類,實現接口 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變量和applicati
【spring boot】3.spring boot項目,綁定資源文件為bean並使用
display fig 屬性綁定 factor pin none rand actor tag 整個例子的結構目錄如下:
1.自定義一個資源文件
com.sxd.name = 申九日木
com.sxd.secret = ${random.value}
com.sx
Java Spring Boot 上傳文件和預覽文件地址解析
jar包 tof form loader index res for catch div
@RequestMapping(value ="/upload",method = RequestMethod.POST)
@Permission(isAjax=fa
Spring Boot 環境變量讀取 和 屬性對象的綁定
out mar mis ring host 重寫方法 條件 popu ide 凡是被Spring管理的類,實現接口 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時,獲取到系統環境變量和application配置文件