校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Spring security實現登陸和權限角色控制

Spring security實現登陸和權限角色控制

熱門標簽:400電話辦理2273649Z空間 濟南電銷外呼防封卡怎么樣 南京外呼系統租用 寧夏外呼系統方案 電銷外呼系統違規 400電話怎么申請收費標準 怎樣在地圖標注自己的信息 智能語音外呼系統打電話 高德地圖標注生成

 隨筆簡介

  1、spring版本:4.3.2.RELEASE+spring security 版本:4.1.2.RELEASE(其它不做說明)
  2、所展示內容全部用注解配置
  3、springmvc已經配置好,不作說明
  4、會涉及到springmvc,spel,el的東西,不熟悉的同學可以先去看一下這方面內容,特別是springmvc 

首先想一下,登陸需要什么,最簡單的情況下,用戶名,密碼,然后比對數據庫,如果吻合就跳轉到個人頁面,否則回到登陸頁面,并且提示用戶名密碼錯誤。這個過程中應該還帶有權限角色,并且貫穿整個會話。有了這個思路,我們只需要把數據庫的用戶名密碼交給spring security比對,再讓security進行相關跳轉,并且讓security幫我們把權限角色和用戶名貫穿整個會話,實際上,我們只需要提供正確的用戶名和密碼,以及配置下security。  

目錄

準備工作
登陸頁面
個人頁面
開始配置spring security

1.啟動spring security

2.配置權限

3.編寫UserDetailService 

首先準備數據庫表

CREATE TABLE `user` (
 `username` varchar(255) NOT NULL,
 `password` char(255) NOT NULL,
 `roles` enum('MEMBER','MEMBER,LEADER','SUPER_ADMIN') NOT NULL DEFAULT 'MEMBER',
 PRIMARY KEY (`username`),
 KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

PS:這里注意的是roles的內容,LEADER也是MEMBER,這樣做,LEADER就擁有MEMBER的權限,當然你也可以在應用里面作判斷,這個后面會說到。

 登陸頁面

%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
html>
head>
 title>登錄/title>
/head>
body>
div >
 
 sf:form action="${pageContext.request.contextPath}/log" method="POST" commandName="user">  !-- spring表單標簽,用于模型綁定和自動添加隱藏的CSRF token標簽 -->
  h1 >登錄/h1>
  c:if test="${error==true}">p style="color: red">錯誤的帳號或密碼/p>/c:if>      !-- 登陸失敗會顯示這句話 -->
  c:if test="${logout==true}">p >已退出登錄/p>/c:if>                    !-- 退出登陸會顯示這句話 -->
  sf:input path="username" name="user.username" placeholder="輸入帳號" />br />
  sf:password path="password" name="user.password" placeholder="輸入密碼" />br />
  input id="remember-me" name="remember-me" type="checkbox"/>                !-- 是否記住我功能勾選框 -->
  label for="remember-me">一周內記住我/label>
  input type="submit" class="sumbit" value="提交" >
 /sf:form>
/div>
/body>
/html> 

個人頁面

%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
%@taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
html>
head>
 title>歡迎你,security:authentication property="principal.username" var="username"/>${username}/title>      !-- 登陸成功會顯示名字,這里var保存用戶名字到username變量,下面就可以通過EL獲取 -->
/head>
body>
security:authorize access="isAuthenticated()">h3>登錄成功!${username}/h3>/security:authorize>  !-- 登陸成功會顯示名字 -->

security:authorize access="hasRole('MEMBER')">              !-- MENBER角色就會顯示 security:authorize標簽里的內容-->
 p>你是MENBER/p>
/security:authorize>

security:authorize access="hasRole('LEADER')">
 p>你是LEADER/p>
/security:authorize>


sf:form id="logoutForm" action="${pageContext.request.contextPath}/logout" method="post">      !-- 登出按鈕,注意這里是post,get是會登出失敗的 -->
 a href="#" onclick="document.getElementById('logoutForm').submit();">注銷/a>
/sf:form>
/body>
/html>

開始配置spring security

1.啟動spring security      

@Order(2)
public class WebSecurityAppInit extends AbstractSecurityWebApplicationInitializer{
}

  繼承AbstractSecurityWebApplicationInitializer,spring security會自動進行準備工作,這里@Order(2)是之前我springmvc(也是純注解配置)和spring security一起啟動出錯,具體是什么我忘了,加這個讓security啟動在后,可以避免這個問題,如果不寫@Order(2)沒有錯就不用管。

2.配置權限

@Configuration
@EnableWebSecurity
@ComponentScan("com.chuanzhi.workspace.service.impl.*")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{          

 @Autowired
 private UserDetailService userDetailService;  //如果userDetailService沒有掃描到就加上面的@ComponentScan

 @Override
 protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests()
     .antMatchers("/me").hasAnyRole("MEMBER","SUPER_ADMIN")//個人首頁只允許擁有MENBER,SUPER_ADMIN角色的用戶訪問
     .anyRequest().authenticated()
     .and()
    .formLogin()
     .loginPage("/").permitAll()        //這里程序默認路徑就是登陸頁面,允許所有人進行登陸
     .loginProcessingUrl("/log")         //登陸提交的處理url
     .failureForwardUrl("/?error=true")   //登陸失敗進行轉發,這里回到登陸頁面,參數error可以告知登陸狀態
     .defaultSuccessUrl("/me")        //登陸成功的url,這里去到個人首頁
     .and()
    .logout().logoutUrl("/logout").permitAll().logoutSuccessUrl("/?logout=true")    //按順序,第一個是登出的url,security會攔截這個url進行處理,所以登出不需要我們實現,第二個是登出url,logout告知登陸狀態
     .and()
    .rememberMe()
     .tokenValiditySeconds(604800)     //記住我功能,cookies有限期是一周
     .rememberMeParameter("remember-me")   //登陸時是否激活記住我功能的參數名字,在登陸頁面有展示
     .rememberMeCookieName("workspace");   //cookies的名字,登陸后可以通過瀏覽器查看cookies名字
 }

 @Override
 public void configure(WebSecurity web) throws Exception {
  super.configure(web);
 }

 @Override
 protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  auth.userDetailsService(userDetailService);  //配置自定義userDetailService
 }
}

3.編寫UserDetailService

  spring security提供給我們的獲取用戶信息的Service,主要給security提供驗證用戶的信息,這里我們就可以自定義自己的需求了,我這個就是根據username從數據庫獲取該用戶的信息,然后交給security進行后續處理

@Service(value = "userDetailService")
public class UserDetailService implements UserDetailsService {

 @Autowired
 private UserRepository repository;          

 public UserDetailService(UserRepository userRepository){
  this.repository = userRepository;              //用戶倉庫,這里不作說明了
 }

 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

  User user = repository.findUserByUsername(username);
  if (user==null)
   throw new UsernameNotFoundException("找不到該賬戶信息!");          //拋出異常,會根據配置跳到登錄失敗頁面

  ListGrantedAuthority> list = new ArrayListGrantedAuthority>();      //GrantedAuthority是security提供的權限類,

  getRoles(user,list);              //獲取角色,放到list里面

  org.springframework.security.core.userdetails.User auth_user = new
    org.springframework.security.core.userdetails.User(user.getUsername(),user.getPassword(),list);      //返回包括權限角色的User給security
  return auth_user;
 }

 /**
  * 獲取所屬角色
  * @param user
  * @param list
  */
 public void getRoles(User user,ListGrantedAuthority> list){
  for (String role:user.getRoles().split(",")) {
   list.add(new SimpleGrantedAuthority("ROLE_"+role));          //權限如果前綴是ROLE_,security就會認為這是個角色信息,而不是權限,例如ROLE_MENBER就是MENBER角色,CAN_SEND就是CAN_SEND權限
  }
 }
}

如果你想在記住我功能有效情況下,在下次進入登陸頁面直接跳到個人首頁可以看一下這個控制器代碼

/**
  * 登錄頁面
  * @param
  * @return
  */
 @RequestMapping(value = "/")
 public String login(Model model,User user
   ,@RequestParam(value = "error",required = false) boolean error
   ,@RequestParam(value = "logout",required = false) boolean logout,HttpServletRequest request){
  model.addAttribute(user);
  //如果已經登陸跳轉到個人首頁
  Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
  if(authentication!=null
    !authentication.getPrincipal().equals("anonymousUser")
    authentication.isAuthenticated())
   return "me";
  if(error==true)
   model.addAttribute("error",error);
  if(logout==true)
   model.addAttribute("logout",logout);
  return "login";
 } 

結果展示:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Spring Security源碼解析之權限訪問控制是如何做到的
  • 話說Spring Security權限管理(源碼詳解)
  • java中自定義Spring Security權限控制管理示例(實戰篇)
  • Spring security實現權限管理示例
  • 關于SpringSecurity配置403權限訪問頁面的完整代碼

標簽:潛江 唐山 仙桃 長白山 茂名 貴港 平頂山 惠州

巨人網絡通訊聲明:本文標題《Spring security實現登陸和權限角色控制》,本文關鍵詞  Spring,security,實現,登陸,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Spring security實現登陸和權限角色控制》相關的同類信息!
  • 本頁收集關于Spring security實現登陸和權限角色控制的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲一区视频在线| 国产裸体歌舞团一区二区| 久久99精品久久久| 91丨porny丨中文| 日韩一级片网站| 亚洲欧美日韩在线不卡| 国产精品88av| 精品免费99久久| 亚洲成人av在线电影| 99久久免费精品高清特色大片| 精品女同一区二区| 日本欧美一区二区在线观看| 日本精品视频一区二区三区| 欧美国产精品劲爆| 国产美女在线精品| 日韩视频永久免费| 丝袜亚洲另类丝袜在线| 色噜噜狠狠成人网p站| 欧美国产禁国产网站cc| 国产揄拍国内精品对白| 欧美大片一区二区| 亚洲成av人片一区二区三区 | 中文av字幕一区| 日本特黄久久久高潮| 欧美色图12p| 亚洲一区在线播放| 在线视频欧美区| 一区二区久久久久久| 色婷婷av一区二区三区gif| 亚洲视频精选在线| 91免费观看国产| 亚洲精品国产精华液| 日本道在线观看一区二区| 日韩理论片中文av| 在线视频一区二区三| 亚洲一区影音先锋| 欧美欧美欧美欧美首页| 亚洲国产精品视频| 91麻豆精品国产91久久久| 免费观看久久久4p| 精品少妇一区二区三区免费观看 | 欧美日韩一区二区三区四区| 亚洲免费电影在线| 欧美日韩一本到| 麻豆91在线观看| 久久一区二区三区四区| 成人精品视频网站| 亚洲女人****多毛耸耸8| 在线观看亚洲a| 免费高清在线视频一区·| 久久美女艺术照精彩视频福利播放| 国产高清一区日本| 一区二区三区日韩欧美精品 | 精品一区二区三区在线观看 | 26uuu色噜噜精品一区二区| 国产精品一区二区三区99| 中文字幕成人av| 91精品福利视频| 美腿丝袜在线亚洲一区| 久久久久久久久伊人| 色狠狠一区二区| 看电视剧不卡顿的网站| 国产精品久久久久久久久晋中 | 日本sm残虐另类| 欧美激情在线一区二区三区| 在线欧美日韩国产| 精品一区二区免费视频| 亚洲三级在线观看| 精品日本一线二线三线不卡| 91麻豆精东视频| 精品一区二区三区影院在线午夜| 亚洲人成在线播放网站岛国| 日韩一级片网站| 在线观看免费视频综合| 国产一区高清在线| 性欧美疯狂xxxxbbbb| 中文文精品字幕一区二区| 欧美伦理视频网站| 成人av免费网站| 久久精品国产色蜜蜜麻豆| 一区二区三区四区激情| 国产欧美日韩中文久久| 日韩一区二区在线播放| 色欧美片视频在线观看在线视频| 国产乱子伦视频一区二区三区| 午夜视频在线观看一区二区三区| 国产精品毛片a∨一区二区三区| 91精品免费观看| 在线观看免费亚洲| 99riav久久精品riav| 国产精品影视在线观看| 男人的天堂久久精品| 亚洲一区视频在线观看视频| 亚洲天堂成人在线观看| 国产日韩精品久久久| 精品国产百合女同互慰| 欧美日韩性生活| 色综合久久综合网欧美综合网| 国产精品一区二区三区四区| 久久99精品久久久久久国产越南| 日韩国产高清影视| 亚洲小少妇裸体bbw| 亚洲色图丝袜美腿| 国产精品国产三级国产有无不卡| 久久在线观看免费| ww久久中文字幕| 精品国产伦理网| 欧美电影免费观看高清完整版在线 | 91精品国产综合久久小美女| 欧美撒尿777hd撒尿| 91福利视频久久久久| 色婷婷国产精品| 91福利国产成人精品照片| 色综合久久综合网97色综合| 日本高清不卡在线观看| 欧美色网站导航| 欧美精品在线观看一区二区| 7777精品伊人久久久大香线蕉完整版| 欧美日韩视频在线第一区| 91精品综合久久久久久| 欧美一区二区三区系列电影| 日韩欧美一级二级三级| 久久精品夜夜夜夜久久| 欧美激情一区不卡| 一区二区中文字幕在线| 亚洲欧美一区二区三区孕妇| 亚洲自拍另类综合| 日本人妖一区二区| 国产曰批免费观看久久久| 处破女av一区二区| 色噜噜狠狠色综合中国| 欧美二区三区的天堂| 精品久久久三级丝袜| 国产精品欧美久久久久一区二区| 国产精品国模大尺度视频| 亚洲一区二区三区美女| 麻豆成人91精品二区三区| 高清在线成人网| 91丝袜美腿高跟国产极品老师 | 成人午夜av电影| 国产精品一区二区免费不卡| 日韩精品国产欧美| 国产乱码精品一区二区三| 91丨porny丨国产入口| 欧美色男人天堂| 久久午夜电影网| 亚洲女人的天堂| 久久狠狠亚洲综合| 精品国产成人在线影院| 久久99在线观看| 99re66热这里只有精品3直播| 欧美日韩国产免费一区二区 | 国产精品影音先锋| 色综合色狠狠天天综合色| 91精品国产福利在线观看 | 精品国产一区二区三区久久影院 | 欧美日韩一区高清| 91视视频在线直接观看在线看网页在线看| 亚洲香肠在线观看| 日本伊人午夜精品| 精品亚洲成av人在线观看| 成人一区在线看| 91精品视频网| 亚洲欧美色综合| 韩国一区二区三区| 欧美在线观看一区| 国产日产欧产精品推荐色| 午夜精品一区在线观看| 国产成人夜色高潮福利影视| 制服视频三区第一页精品| 成人免费在线视频观看| 韩国v欧美v亚洲v日本v| 欧美日产国产精品| 亚洲欧洲精品一区二区三区不卡| 久久国产精品99久久久久久老狼| 91国模大尺度私拍在线视频| 欧美激情一区二区三区在线| 免费成人在线网站| 欧美日韩国产精选| 亚洲少妇最新在线视频| 风间由美性色一区二区三区| 欧美一区二区三区免费视频| 亚洲国产一区视频| 91蜜桃免费观看视频| 国产精品素人视频| 国产资源在线一区| 日韩欧美国产精品| 日韩精品91亚洲二区在线观看| 一本大道久久a久久综合婷婷| 综合久久国产九一剧情麻豆| 国产成人av电影在线观看| 日韩欧美电影一二三| 日韩成人一级片| 欧美久久久影院| 人人爽香蕉精品| 欧美一区二区免费| 日韩中文欧美在线| 91精品欧美一区二区三区综合在| 日韩va亚洲va欧美va久久| 欧美一区二区三区爱爱|