0 부터 자신의 사 이 트 를 구축 합 니 다 28: springboot 은 shiro 권한 을 설정 하고 freemarker 에서 권한 통 제 를 합 니 다.

우 리 는 shiro 를 통 해 권한 통 제 를 진행 합 니 다. 오늘 말 하고 자 하 는 것 은 springboot 에 shiro 를 설정 하 는 것 입 니 다.
1. shiro 가방 도입
첫 번 째 는 shiro 의 핵심 가방 이 고, 두 번 째 는 freemarker 에서 shiro 라벨 을 사용 한 가방 입 니 다.
compile('org.apache.shiro:shiro-spring:1.3.2')
compile('net.mingsoft:shiro-freemarker-tags:0.1')

2. 사용자 정의 CustomRealm
public class CustomRealm extends AuthorizingRealm {

    private static final Logger logger = LoggerFactory.getLogger(CustomRealm.class);

    @Autowired
    private UserService userService;

    /**
     *         
     * Shiro ,      Realm            、        。
     *
     * @param authenticationToken        token
     * @return            AuthenticationInfo   
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        logger.info("————      ————");
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        //                 
        String password = userService.getPassword(token.getUsername());
        if (null == password) {
            throw new AccountException("      ");
        } else if (!password.equals(new String((char[]) token.getCredentials()))) {
            throw new AccountException("     ");
        }
        return new SimpleAuthenticationInfo(token.getPrincipal(), password, getName());
    }

    /**
     *       
     *
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        logger.info("————    ————");
        String username = (String) SecurityUtils.getSubject().getPrincipal();
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        //       
        String role = userService.getUserRole(username);
        logger.info(username + "    :" + role);
        String[] split = role.split(",");
        Set set = new HashSet<>();
        for (String ro : split) {
            //    role     Set    info.setRoles()    
            set.add(ro);
        }
        //          
        info.setRoles(set);
        return info;
    }
}
/**
 * freemarker  Shiro  
 */
@Component
public class ShiroTagFreeMarkerConfigurer implements InitializingBean {

    @Autowired
    private Configuration configuration;

    @Autowired
    private FreeMarkerViewResolver resolver;

    @Override
    public void afterPropertiesSet() throws Exception {
        //      ,        shiro  
        configuration.setSharedVariable("shiro", new ShiroTags());
        //      ,       ${context.contextPath}  contextPath
        resolver.setRequestContextAttribute("context");
    }
}
/**
 * shiro      
 * Created by 493858256qq.com on 2019/8/9.
 */
@Configuration
public class ShiroConfig {

    private static final Logger logger = LoggerFactory.getLogger(ShiroConfig.class);

    @Bean
    public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //      SecurityManager
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // setLoginUrl       ,       Web       "/login.jsp"     "/login"   
        shiroFilterFactoryBean.setLoginUrl("/login/login");
        //           url;
        shiroFilterFactoryBean.setUnauthorizedUrl("/login/login");
        //      
        Map filterChainDefinitionMap = new LinkedHashMap<>();
        //  ,    
        filterChainDefinitionMap.put("/guest/**", "anon");
        //  ,       “user”
        //   ,       “admin”
        filterChainDefinitionMap.put("/manager/**", "roles[user]");
        //      
        filterChainDefinitionMap.put("/login", "anon");
        filterChainDefinitionMap.put("/css/**", "anon");
        filterChainDefinitionMap.put("/js/**", "anon");
        //        
        //                   ,        url     
        filterChainDefinitionMap.put("/**", "anon");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        logger.info("Shiro          ");
        return shiroFilterFactoryBean;
    }

    /**
     *    securityManager
     */
    @Bean
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        //   realm.
        securityManager.setRealm(customRealm());
        return securityManager;
    }

    /**
     *         realm;
     * 

     *  ,  @Bean  ,  CustomRealm,      *   CustomRealm        */     @Bean     public CustomRealm customRealm() {         return new CustomRealm();     } }


3. html 에서 shiro 라벨 을 사용 하여 제어 메뉴 를 표시 합 니 다. 예 를 들 어 admin 역할 은 첫 페이지 를 표시 할 수 있 습 니 다.

  • 첫 페이지
  • @shiro.hasRole>
  • 개인 정보

  •  
    전재 환영 합 니 다. 전재 출처 를 밝 혀 주세요. https://www.dingyinwu.com/article/74.html
    글 에 문제 가 있 거나 개선 할 수 있 는 부분 이 있다 면 의견 을 많이 제시 해 주시 면 감사 하 겠 습 니 다.

    좋은 웹페이지 즐겨찾기