1. 程式人生 > 資訊 >馬斯克遭特斯拉股東起訴,被指以權謀私收購 SolarCity

馬斯克遭特斯拉股東起訴,被指以權謀私收購 SolarCity

匯入依賴

  • shiro整合spring
    <dependency>
       <groupId>org.apache.shiro</groupId>
       <artifactId>shiro-spring-boot-web-starter</artifactId>
       <version>1.7.1</version>
    </dependency>
    

Config

  • shiro配置類
  @Bean
  public UserRealm userRealm(){
      return new UserRealm();
  }

  @Bean(name = "defaultWebSecurityManager")
  public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm){
      DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
      securityManager.setRealm(userRealm);
      return securityManager;
  }

  @Bean
  public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
      ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
      bean.setSecurityManager(defaultWebSecurityManager);
      //新增內建過濾器
      /**
       * anon  無需認證就可以訪問
       * authc  認證才能訪問
       * user  有 記住我 功能才能訪問
       * perms 有資源許可權才能訪問
       * role  有角色許可權才能訪問
       */
      Map<String, String> filterMap = new LinkedHashMap<>();

      //設定訪問許可權
      //認證許可權
      //filterMap.put("/user/*","authc");支援萬用字元
      filterMap.put("/user/add","authc");
      filterMap.put("/user/delete","authc");

      //只有 user:add 許可權才能訪問 add 頁面
      filterMap.put("/user/add","perms[user:add]");

      //設定登入請求
      bean.setLoginUrl("/toLogin");
      //未授權進入此提醒頁面
      bean.setUnauthorizedUrl("/unauthorized");

      bean.setFilterChainDefinitionMap(filterMap);
      return bean;
  }
  • Realm類
public class UserRealm extends AuthorizingRealm {
//    授權
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        System.out.println("執行授權");
        //設定當前使用者許可權
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        info.addStringPermission("user:add");

        /**
         * 得到當前使用者
         * Subject subject = SecurityUtils.getSubject();
         * 拿到 認證 方法中得到的 user 物件
         * User user = (User)subject.getPrincipal();
         * user 物件中有自己的 許可權
         * info.addStringPermission(user.getPerms())
         */
        return info;
    }

    //認證
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        System.out.println("執行認證");
        //使用者名稱、密碼,資料庫中取得
        //查詢資料庫返回 user 物件
        String name = "root";
        String pwd = "123123";
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        if (!token.getUsername().equals(name)){
            return null;//拋異常 UnknownAccountException
        }

        //AuthenticationInfo 是介面,返回該介面的實現類
        //shiro做密碼認證
        return new SimpleAuthenticationInfo("",pwd,"");
//        return new SimpleAuthenticationInfo(user,pwd,"");
    }
}

Controller

  • 獲取登入資訊,通過 UsernamePasswordToken(username, password) 傳遞引數。
  • subject.login() 進行登入認證。

備註

  • 新增許可權和角色