亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 幫助中心 > 正文

基于springboot實現整合shiro實現登錄認證以及授權過程解析

2024-07-09 22:42:46
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了基于springboot實現整合shiro實現登錄認證以及授權過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1.添加shiro的依賴

<dependency>  <groupId>org.apache.shiro</groupId>      <artifactId>shiro-spring-boot-web-         starter</artifactId>  <version>1.4.0</version></dependency>

2.先創建一個Realm

public class MyShiroRealm extends AuthorizingRealm {  @Autowired  private RoleService roleService;//角色模模塊  @Autowired  private UserService userService;//用戶模塊  @Autowired  private PermissionService permissionService;//權限模塊  /**   * 用戶身份識別(登錄")   * @param authenticationToken   * @return   * @throws AuthenticationException   */  @Override  protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {    UsernamePasswordToken authToken = (UsernamePasswordToken) authenticationToken;    // 獲取用戶輸入的賬號    String userName = authToken.getUsername();     //通過賬號查找用戶信息    User user= userService.selectUserOne(userName);// 將賬戶名,密碼,鹽值,getName()實例化到SimpleAuthenticationInfo中交給Shiro來管理    SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(                              user,                              user.getPassWord(),                                    //這里是設置的密碼鹽                              ByteSource.Util.bytes(user.getSalt()),                              getName());    return authenticationInfo;  }  /**   * 訪問控制。比如某個用戶是否具有某個操作的使用權限   * @param principalCollection   * @return   */  @Override  protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();    String userName = (String) principalCollection.getPrimaryPrincipal();    if (userName == null) {      log.error("授權失敗,用戶信息為空?。?!");      return null;    }    try {      //獲取用戶角色集      Set<String> listRole= roleService.findRoleByUsername(userName);      simpleAuthorizationInfo.addRoles(listRole);      //通過角色獲取權限集      for (String role : listRole) {        Set<String> permission= permissionService.findPermissionByRole(role);        simpleAuthorizationInfo.addStringPermissions(permission);      }      return simpleAuthorizationInfo;    } catch (Exception e) {      log.error("授權失敗,請檢查系統內部錯誤!!!", e);    }    return simpleAuthorizationInfo;  }}


3.創建shiro的配置類

@Configurationpublic class ShiroConfiguration {   //配置自定義的Realm  @Bean  public MyShiroRealm myShiroRealm(HashedCredentialsMatcher matcher){    MyShiroRealm myShiroRealm= new MyShiroRealm();     //在這里配置密碼加密    myShiroRealm.setCredentialsMatcher(matcher);    return myShiroRealm;  }   //將Realm注冊到securityManager中  @Bean  public DefaultWebSecurityManager securityManager(HashedCredentialsMatcher matcher){    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();    securityManager.setRealm(myShiroRealm(matcher));    return securityManager;  }  //如果沒有此name,將會找不到shiroFilter的Bean  @Bean(name = "shiroFilter")  public ShiroFilterFactoryBean shiroFilter(org.apache.shiro.mgt.SecurityManager securityManager){    ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();    shiroFilterFactoryBean.setSecurityManager(securityManager);    shiroFilterFactoryBean.setLoginUrl("/login");     //表示指定登錄頁面    shiroFilterFactoryBean.setSuccessUrl("/user/list");  // 登錄成功后要跳轉的鏈接    shiroFilterFactoryBean.setUnauthorizedUrl("/403");  //未授權頁面    Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();//攔截器, 配置不會被攔截的鏈接 順序判斷    filterChainDefinitionMap.put("/login","anon");           //所有匿名用戶均可訪問到Controller層的該方法下    filterChainDefinitionMap.put("/userLogin","anon");    filterChainDefinitionMap.put("/image/**","anon");    filterChainDefinitionMap.put("/css/**", "anon");    filterChainDefinitionMap.put("/fonts/**","anon");    filterChainDefinitionMap.put("/js/**","anon");    filterChainDefinitionMap.put("/logout","logout");    filterChainDefinitionMap.put("/**", "authc"); //authc:所有url都必須認證通過才可以訪問; anon:所有url都都可以匿名訪問    //filterChainDefinitionMap.put("/**", "user");    //user表示配置記住我或認證通過可以訪問的地址    shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);    return shiroFilterFactoryBean;  }  /**   * SpringShiroFilter首先注冊到spring容器   * 然后被包裝成FilterRegistrationBean   * 最后通過FilterRegistrationBean注冊到servlet容器   * @return   */  @Bean  public FilterRegistrationBean delegatingFilterProxy(){    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();    DelegatingFilterProxy proxy = new DelegatingFilterProxy();    proxy.setTargetFilterLifecycle(true);    proxy.setTargetBeanName("shiroFilter");    filterRegistrationBean.setFilter(proxy);    return filterRegistrationBean;  }  //設置cookie  @Bean  public SimpleCookie rememberMeCookie(){    //這個參數是cookie的名稱,對應前端的checkbox的name=rememberMe    SimpleCookie simpleCookie = new SimpleCookie("rememberMe");    //記住我cookie生效時間3個小時(單位秒)    simpleCookie.setMaxAge(10800);    return simpleCookie;  }  //cookie管理對象,記住我功能  @Bean  public CookieRememberMeManager rememberMeManager(){    CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();    cookieRememberMeManager.setCookie(rememberMeCookie());    return cookieRememberMeManager;  }  /**   * 密碼匹配憑證管理器(密碼加密需要此配置)   * @return   */  @Bean(name = "hashedCredentialsMatcher")  public HashedCredentialsMatcher hashedCredentialsMatcher() {    HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();    hashedCredentialsMatcher.setHashAlgorithmName("MD5");    hashedCredentialsMatcher.setHashIterations(1024);// 設置加密次數    return hashedCredentialsMatcher;  }  //如果沒有這兩個配置,可能會授權失敗,所以依賴中還需要配置aop的依賴  @Bean  public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(HashedCredentialsMatcher matcher) {    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();    authorizationAttributeSourceAdvisor.setSecurityManager(securityManager(matcher));    return authorizationAttributeSourceAdvisor;  }  @Bean  @ConditionalOnMissingBean  public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){    DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();    defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);    return defaultAdvisorAutoProxyCreator;  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美夜福利tv在线| 国产精品h在线观看| 视频在线一区二区| 久久999免费视频| 欧美综合激情网| 中文字幕欧美在线| 欧美亚洲成人xxx| 日韩中文字幕在线免费观看| xxxx性欧美| 欧美亚洲另类视频| 国产亚洲免费的视频看| 久久久久久成人精品| 久久成人精品视频| 亚洲一区二区日本| 亚洲天堂开心观看| 亚洲字幕在线观看| 久久久国产一区二区三区| 国产成人免费91av在线| 久久久在线观看| 色综合男人天堂| 亚洲偷欧美偷国内偷| 日韩成人激情影院| 精品国内亚洲在观看18黄| 成人国产在线视频| 亚洲视频一区二区| 91精品久久久久久久久| 69国产精品成人在线播放| 97碰碰碰免费色视频| 成人欧美一区二区三区在线| 亚洲精品理论电影| 亲爱的老师9免费观看全集电视剧| 欧美日韩一区二区三区| 亚洲日本中文字幕| 日韩在线视频国产| 亚洲人成在线一二| 亚洲一级免费视频| 亚洲国内精品视频| 欧美日韩国内自拍| 国产精品va在线播放| 91精品国产乱码久久久久久蜜臀| 日韩电影免费在线观看中文字幕| 亚洲欧美一区二区三区久久| 色午夜这里只有精品| 欧美亚洲国产精品| 国产精品网址在线| 亚洲va久久久噜噜噜久久天堂| 视频在线一区二区| 欧美猛交免费看| 成人激情视频网| www.美女亚洲精品| 欧美精品国产精品日韩精品| 97久久精品人搡人人玩| 国产精品尤物福利片在线观看| 日韩精品免费一线在线观看| 日av在线播放中文不卡| 亚洲一区二区三区四区在线播放| 岛国av一区二区在线在线观看| 日韩久久免费视频| 国产精品美女主播| 日韩美女视频在线观看| 欧美黑人性猛交| 亚洲视频在线视频| 91热精品视频| 国产精品久久久久久久av电影| 亚洲第一av网| 欧美午夜无遮挡| 欧美成人国产va精品日本一级| 日韩精品在线免费观看视频| 欧美成人精品h版在线观看| 久久精品国产96久久久香蕉| 在线播放日韩欧美| 日韩av一区二区在线观看| 亚洲精品综合精品自拍| 欧美成人亚洲成人日韩成人| 国产成人免费av电影| 日韩精品久久久久| 日韩av免费看| 欧美理论电影网| 日韩精品免费视频| 日韩在线视频播放| 夜夜躁日日躁狠狠久久88av| 日韩av中文字幕在线播放| 中日韩午夜理伦电影免费| 久久av在线看| 亚洲性无码av在线| 97色在线播放视频| 一区二区欧美久久| 久久亚洲国产精品| 成人国产精品久久久| 夜夜躁日日躁狠狠久久88av| 国产一区二区欧美日韩| 亚洲精品久久久久久久久久久久久| 亚洲欧美一区二区三区在线| 国产精品国产自产拍高清av水多| 国产女人18毛片水18精品| 在线播放亚洲激情| 国产精品旅馆在线| 久久精品电影一区二区| 亚洲欧美另类中文字幕| 国产成人综合精品在线| 国产女人精品视频| 国产午夜精品全部视频在线播放| 91久久久亚洲精品| 成人福利网站在线观看11| 精品亚洲永久免费精品| 亚洲精品免费在线视频| 日韩免费在线看| 久久国产精品影片| 国产欧美韩国高清| 久久香蕉精品香蕉| 亚洲欧美国产制服动漫| 欧美日韩亚洲一区二区三区| 国产精品av在线播放| 亚洲人成在线免费观看| 国产精品久久久久久久久久久久| 久久久久久久久久婷婷| 亚洲视频在线视频| 亚洲免费中文字幕| 欧美大片在线看免费观看| 欧美激情在线观看视频| 久久亚洲综合国产精品99麻豆精品福利| 欧美日韩在线视频观看| 亚洲国产精品人久久电影| 69国产精品成人在线播放| 亚洲欧美日韩在线高清直播| 在线亚洲欧美视频| 青青草原成人在线视频| 欧美性猛交xxxx乱大交极品| 久久国产精彩视频| 欧美成人四级hd版| 亚洲第一男人天堂| 亚洲精品www久久久久久广东| 亚洲精品视频播放| 国产精品无av码在线观看| 中文字幕最新精品| 欧美极品少妇全裸体| 亚洲a区在线视频| 狠狠色噜噜狠狠狠狠97| 狠狠躁夜夜躁人人爽超碰91| 欧美一级大胆视频| 亚洲国产成人精品一区二区| www.久久色.com| 97久久久免费福利网址| 亚洲色图狂野欧美| 91sao在线观看国产| 92看片淫黄大片欧美看国产片| 欧美黄色成人网| 日韩欧美国产网站| 狠狠躁天天躁日日躁欧美| 欧美激情奇米色| 久久久久久成人精品| 久久精品久久精品亚洲人| 日韩欧美一区二区三区久久| 亚洲国产天堂久久综合| 成人a视频在线观看| 亚洲欧美日韩在线高清直播| 亚洲欧美日韩高清| 亚洲欧美日韩精品久久亚洲区| 亚洲xxxx做受欧美| 91po在线观看91精品国产性色| 亚洲乱码国产乱码精品精天堂| 日本在线观看天堂男亚洲| 日韩av一区在线| 欧美极品欧美精品欧美视频|