ile basit bir XML belgesinin ayrıştırılması Web uygulamam için bir yetkilendirme filtresi oluşturmak istiyorum (Belirli sayfalara erişimi kısıtlayabilmek için). Alma şartlarını oluşturmak için muktedirJAXP (JEE6)
<access>
<buyer>
<page>buyoffer.xhtml</page>
<page>faq.xhtml</page>
<page>index.jsp</page>
<page>login.xhtml</page>
<page>main.xhtml</page>
<page>registrationSucceded.xhtml</page>
</buyer>
<seller>
<page>sellerpanel.xhtml</page>
<page>faq.xhtml</page>
<page>index.jsp</page>
<page>login.xhtml</page>
<page>main.xhtml</page>
<page>registrationSucceded.xhtml</page>
</seller>
<administrator>
<page>sellerpanel.xhtml</page>
<page>faq.xhtml</page>
<page>index.jsp</page>
<page>login.xhtml</page>
<page>main.xhtml</page>
<page>registrationSucceded.xhtml</page>
</administrator>
</access>
Sonra ben sayfaların değerini ayıklamak için ayrıştırma yapmak gerekir:
Ben her kullanıcı ziyarete izin verilen sayfaları ile basit bir .xml dosyası oluşturduk izin ver veya yönlendir (Bağla). Sadece bu sayfaların değerlerini xml'den nasıl çıkaracağınızı söylemek için birine ihtiyacım var. Bu i şimdiye kadar ne yaptığını geçerli: doFilter yöntemi içinde yorumlarındapublic class RestrictPageFilter implements Filter {
private FilterConfig fc;
private DocumentBuilder builder;
private Document document;
public void init(FilterConfig filterConfig) throws ServletException {
// The easiest way to initialize the filter
fc = filterConfig;
// Get the file that contains the allowed pages
File f = new File("/allowedpages.xml");
// Prepare the file parsing
try {
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(f);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
String pageRequested = req.getRequestURL().toString();
// Get the value of the current logged user
Role currentUser = (Role) session.getAttribute("userRole");
if (currentUser != null) {
if(currentUser.getType().equals("BUYER")) {
//Loop BUYER Element of the .xml
//if pageRequested.contains(value of the page at buyer element)
// chain.doFilter(request, response);
// Else
// Redirect the user to the main page
}
else if(currentUser.getType().equals("SELLER")) {
//Same as above just for seller element
}
else if(currentUser.getType().equals("ADMINISTRATOR")) {
//Same as above just for administrator element
}
}
}
public void destroy() {
// Not needed
}
}
i yapmanız gerekenler açıklanmıştır. Birisi, kullanıcı türlerinin her biri için sayfa isimlerini bulmak için dosyada nasıl yinelemem gerektiği konusunda bana bir ipucu verebilir mi? İnternetten JAXP örneklerini takip etmeye çalışıyorum, ancak ihtiyaç duyduğumdan daha karmaşık.
Güncelleme xml WEB-INF/sınıfları saklanır İhtiyacınız olarak
+1 Ev güvenliği için en iyi uygulama değil – ahvargas
Kaptan yönetilen güvenliği kullanmayı çok isterim çünkü daha iyi biliyorum, senaryoda bunu uygulamakta zorlanıyorum. Biraz daha öğrenene kadar bu yaklaşıma sadık kalacağım. S. web.xml dosyasına bir şey eklemem gerekir mi? – sfrj
Hiçbir şey. Yukarıdaki, XML'i okumak için yapmanız gereken tek şey. JAXB zaten Java EE 6 kapları ile paketlenmiştir (Biliyorum Glassfish kullanıyorsun). Tomcat'ta ayrı olarak yüklemeniz ve yapılandırmanız gerekir. – BalusC