Я пытаюсь создать свой собственный тег, чтобы я мог отображать или скрывать содержимое между тегами в зависимости от набора атрибутов.
<mytag:isUserInRole role="admin">Show admin specific text</mytag:isUserInRole>`
В основном я хочу показать текст между тегами, если вошел в системуу пользователя есть role==admin
.Я думал, что это будет легко, но пока мне не повезло.Если я в моем наборе tld-файлов <body-content>empty</body-content>
, я получаю это исключение:
"Согласно TLD, тег auth: isUserInRole должен быть пустым, но не равен"
Если я установил <body-content />
я получаю это:
Невозможно скомпилировать класс для JSP - вызвано: java.lang.NullPointerException в org.apache.jasper.compiler.Parser.parseBody (Parser.java:1857)
Кто-нибудь может увидеть, что я делаю неправильно?
Это мой тег, относящийся к моим tld-файлам:
<tag>
<name>isUserInRole</name>
<tag-class>no.mycompany.tag.AuthorizationTag</tag-class>
<body-content />
<attribute>
<name>role</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
А вот мой метод авторизации в теге doStartTag:
public int doStartTag() throws JspException{
System.out.println("Role"+role);
//Check that role is given and securitycontext is not null
if(role==null|| SecurityContextHolder.getContext()==null || SecurityContextHolder.getContext().getAuthentication()==null){
return Tag.SKIP_BODY;
}
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if(hasPermission(auth)){
return Tag.EVAL_BODY_INCLUDE;
} else {
return Tag.SKIP_BODY;
}
}