Spring Boot整合Spring Security

Spring Boot對(duì)Spring Security的支持

Spring Boot針對(duì)Spring Security的自動(dòng)配置在org.springframework.boot.autoconfigure.security包中惠毁。

主要通過(guò)SecurityAutoConfiguration和SecurityProperties來(lái)完成配置柒傻。

SecurityAutoConfiguration導(dǎo)入了SpringBootWebSecurityConfiguration中的配置蜂科。

在SpringBootWebSecuriyConfiguration配置中,我們獲得如下自動(dòng)配置。

? Spring Boot為我們做了如此多的配置,當(dāng)我們需要自己擴(kuò)展的配置時(shí),只需配置類繼承WebSecurityConfigurerAdapter類即可,無(wú)須使用@EnableWebSecurity注解塞关,例如:

下面我們來(lái)具體看看代碼:

1.0spring 4.0 對(duì)servlet3.0專門添加了一個(gè)類(WebApplicationInitializer),來(lái)替代web.xml中對(duì)于spring mvc的配置,這是工程目錄結(jié)構(gòu):

config包下主要兩個(gè)配置一個(gè)是整合spring mvc子巾,一個(gè)是整合spring security;

通過(guò)繼承WebMvcConfigurerAdapter,來(lái)修改對(duì)spring mvc的默認(rèn)配置帆赢,spring boot也可直接在application.properties配置。

@Configuration

public class WebMvcConfig extends WebMvcConfigurerAdapter{

@Override

public void addViewControllers(ViewControllerRegistry registry) {

registry.addViewController("/login").setViewName("/login");

}

}

下面是對(duì)Spring Security的配置

@Configuration

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Bean

UserDetailsService SysuserService() {

return new SysUserServiceImpl();

}

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.userDetailsService(SysuserService());

}

@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests().anyRequest().authenticated().and().formLogin()

.loginPage("/login").failureUrl("/login?error").permitAll().and().logout().permitAll();

}

}

代碼解釋:

?Spring Security配置類

?1)首先繼承WebSecurityConfigurerAdapter

* 2)注冊(cè)SysuserService的Bean

* 3)添加我們自定義的user detail service 認(rèn)證

* 4)所有請(qǐng)求需要認(rèn)證即登錄才能訪問(wèn)

* 5)定制登錄行為,登錄頁(yè)面可任意訪問(wèn)

* 6)定制注銷行為,注銷請(qǐng)求可任意訪問(wèn)

接著我們看看用戶實(shí)體類:

public class SysUser implements UserDetails

{?

?private Integer usersId;

?private String username;

?private String password;?

?private List roles;?

@Override

public Collection<? extends GrantedAuthority> getAuthorities()?

{

List auths = new ArrayList<>();

Listroles2 = this.getRoles();

for (SysRole sysRole : roles2) {

auths.add(new SimpleGrantedAuthority(sysRole.getRoleName()));

}

return auths;

}

@Override

public boolean isAccountNonExpired() {

// TODO Auto-generated method stub

return true;

}

@Override

public boolean isAccountNonLocked() {

// TODO Auto-generated method stub

return true;

}

@Override

public boolean isCredentialsNonExpired() {

// TODO Auto-generated method stub

return true;

}

@Override

public boolean isEnabled() {

// TODO Auto-generated method stub

return true;

}

}

讓我們的用戶實(shí)體實(shí)現(xiàn)UserDetails接口,我們的用戶實(shí)體即為Spring Security所使用的用戶重寫getAuthorities方法线梗,將用戶的角色作為權(quán)限

角色類:(get set方法沒(méi)寫)

public class SysRole{

private Integer roleId;

private String roleName;

}

?多對(duì)多的一個(gè)映射類

public class SysUserRolesKey {

private Integer sysUserId;

private Integer rolesId;

}

接下來(lái)我們看看service匿醒,dao層自己實(shí)現(xiàn)(orm框架自己選擇)

public class SysUserServiceImpl implements SysUserService,UserDetailsService {

@Autowired

private SysUserMapper sysUserMapper;

@Override

public SysUser findByUsers(String name) {

// TODO Auto-generated method stub

SysUser sysUser = sysUserMapper.findByUserName(name);

return sysUser;

}

@Override

public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {

SysUser sysUser = sysUserMapper.findByUserName(name);

return sysUser;

}

}

代碼解釋:

?自定義需實(shí)現(xiàn)UserDetailsService接口

?重寫loadUserByUsername方法獲取用戶

?我們當(dāng)前用戶實(shí)現(xiàn)了UserDetails接口,可直接返回給Spring Security使用

看看控制器類:

@Controller

public class HomeController {

@RequestMapping("/")

public String index(Model model){

Msg msg? = new? Msg("測(cè)試","測(cè)試內(nèi)容", "額外信息,只對(duì)管理員顯示");

model.addAttribute("msg", msg);

return "home";

}

}

每次訪問(wèn)controller時(shí),會(huì)調(diào)用service層的loadUserByUsername方法獲取權(quán)限缠导。

前臺(tái)我用的thymeleaf,它集成了Spring Security標(biāo)簽

程序運(yùn)行截圖:

使用wisely普通用戶登錄:


使用wyf管理員登錄:


參考書(shū)籍:JavaEE開(kāi)發(fā)的顛覆者 Spring Boot實(shí)戰(zhàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末廉羔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僻造,更是在濱河造成了極大的恐慌憋他,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件髓削,死亡現(xiàn)場(chǎng)離奇詭異竹挡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)立膛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門揪罕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梯码,“玉大人,你說(shuō)我怎么就攤上這事好啰⌒ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵框往,是天一觀的道長(zhǎng)鳄抒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)椰弊,這世上最難降的妖魔是什么许溅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮秉版,結(jié)果婚禮上贤重,老公的妹妹穿的比我還像新娘。我一直安慰自己清焕,他們只是感情好游桩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著耐朴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盹憎。 梳的紋絲不亂的頭發(fā)上筛峭,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音陪每,去河邊找鬼影晓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛檩禾,可吹牛的內(nèi)容都是我干的挂签。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼盼产,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饵婆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戏售,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤侨核,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灌灾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搓译,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年锋喜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了些己。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豌鸡。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖段标,靈堂內(nèi)的尸體忽然破棺而出涯冠,到底是詐尸還是另有隱情,我是刑警寧澤怀樟,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布功偿,位于F島的核電站,受9級(jí)特大地震影響往堡,放射性物質(zhì)發(fā)生泄漏械荷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一虑灰、第九天 我趴在偏房一處隱蔽的房頂上張望吨瞎。 院中可真熱鬧,春花似錦穆咐、人聲如沸颤诀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崖叫。三九已至,卻和暖如春拍柒,著一層夾襖步出監(jiān)牢的瞬間心傀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工拆讯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脂男,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓种呐,卻偏偏與公主長(zhǎng)得像宰翅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爽室,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理汁讼,服務(wù)發(fā)現(xiàn),斷路器阔墩,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法掉缺,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法戈擒,繼承相關(guān)的語(yǔ)法眶明,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,632評(píng)論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,815評(píng)論 6 342
  • springboot配置選項(xiàng)(一) =======================================...
    JanloongDo_0閱讀 4,797評(píng)論 0 3
  • =========================================================...
    lavor閱讀 3,490評(píng)論 0 5