[Handlebar] config 및 handler 적용

배세훈·2021년 10월 7일
0

Handlebar

목록 보기
1/1

Handlebar 설치

// build.gradle

compile ('pl.allegro.tech.boot:handlebars-spring-boot-starter:0.3.2')
compile 'com.github.jknack:handlebars-helpers:4.2.0',
	'com.github.jknack:handlebars-jackson2:4.2.0',
    	'com.github.jknack:handlebars-humanize:4.2.0',
    	'com.github.jknack:handlebars-markdown:4.2.0'

Handlebar config

// HandlebarConfig.java

@Configuration
public class HandlebarConfig{
	
    @Autowired
    LoginAdminHelper loginAdminHelper;
    
    @Autowired
    EqualHelper equalHelper;
    
    @Bean
    public HandlebarsViewResolver viewResolver() throws Exception{
    
    	HandlebarsViewResolver viewResolver = new HandlebarsViewResolver();
        viewResolver.setOrder(1);
        viewResolver.setPrefix("classpath:/templates"); // 기본값이 classpath:/templates 라고 되어 있긴 함
        viewResolver.setSuffix(".hbs"); // 기본값이 .hbs라고 되어 있긴 함
        viewResolver.registerHelpers(loginAdminHelper); // loginAdminHelper에는 메소드가 여러개 있으며 각 메소드의 이름이 helper의 이름이 된다.
        viewResolver.registerHelper("equal", equalHelper); // equal이라는 helper 이름으로 equalHelper의 클래스가 등록된다.
        viewResolver.setCache(false); // 캐시 사용 여부
        viewResolver.setBindI18nToMessageSource(true); // true라면 ResourceBundle 대신 MessageSource를 사용한다.
        
        return viewResolver;
    }
    
}
// LoginAdminHelper.java

@HandlebarsHelper
@Component
public class LoginAdminHelper{
	
    @Autowired
    private HttpSession session;
    
    @Autowired
    @Qualifier("AllRoleMap")
    private Map<com.code.Role, Map<String, AdminRoleDto>> allRoleMap;
    
    @Autowired
    private SettingsService settingsService;
    
    public CharSequence greet() { return "Hello World"; } // handler에서 {{greet}}로 사용
    
    public boolean hasRole(String params1, String params2){ // handler에서 {{#if (hasRole param1 param2)}} 으로 사용
    	
        String code = params1;
        
        try{
        	Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            if(principal == null || "anonymousUser".equals(principal)) return false;
            
            CustomUserDetails userDetails = (CustomUserDetails)principal;
            String roleName = userDetails.getRoleName();
            if(ToolUtils.isNullOrEmpty(roleName)) return false;
            
            Role role = Role.valueOf(roleName);
            if(role == null) return false;
            
            Map<String, AdminRoleDto> roleInfoMap = allRoleMap.get(role);
            AdminRoleDto roleInfo = roleInfoMap.get(code);
            
            if(roleInfo == null){
            	return false;
            }
            
            String type = "0";
            if(params2 != null){
            	type = params2;
            }
            if("0".equals(type)){
            	return "Y".equals(roleInfo.getReadYn());
            }else{
            	return "Y".equals(roleInfo.getCudYn());
            }
        }catch(Exception e){
        	return false;
        }
    }
    
    public boolean loginAuthType(){ // handler에서 {{loginAuthType}} 으로 사용
    	SystemSettings settings = settingsService.getValue(SiteExtName.SETTINGS_ADMIN_LOGIN_TYPE);
        return LoginAuthType.fromCode(settings.getValue()).getCode();
    }
    
}
// EqualHelper.java

@Component
@HandlebarsHelper
public class EqualHelper implements Helper<Object>{
	
    public static final String NAME = "equal";
    
    @Override
    public Object apply(Object context, Options options) throws IOException{
    	String arg1, arg2;
        if(null == context || null == options){
        	throw new IllegalArgumentException("Parameter is empty");
        }
        
        arg1 = context.toString();
        arg2 = options.param(0).toString(); // options는 여러개 받을 수 있음. {{#if (equal "test" "test1" "test2"}} 로 값을 넘길 경우 options.param(0)="test1", options.param(1)="test2"
        
        return arg1.equals(arg2);
    }
    
}
profile
성장형 인간

0개의 댓글