2014-01-16 4 views
1

Прежде всего, я хочу извиниться за мой плохой английский. Хорошо, у меня проблема. Я создаю приложение, которое использует jdbcrealm и web.xml для обеспечения безопасности. Вход осуществляется через веб-форму. Приложение работает на Apache Tomcat 7, и я использую Primefaces 4.0. В web.xml я определил некоторые роли и некоторые ограничения безопасности. Когда я вхожу в приложение httpservlet request.login (имя пользователя, пароль), выполняйте работу отлично, а request.isUserInrole («role») также выполняет работу, Faces.getExternalContext.redirect перенаправляет страницу для исправления папки, на которой применяется ограничение безопасности , в браузере я вижу правильный URL ..... но страница Blank !!! Если я проверяю источник страницы, я вижу страницу источника страницы входа ... Я поставлю несколько скриншотов ниже. Пожалуйста, помогите мне ... Я пытаюсь решить проблему уже 2 недели!Проблемы с web.xml

/*

*/ это web.xml

<param-name>primefaces.THEME</param-name> 

    <param-value>afterdark</param-value> 

</context-param> 

<servlet> 

    <servlet-name>Faces Servlet</servlet-name> 

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 

    <servlet-name>Faces Servlet</servlet-name> 

    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
<security-role> 
    <description>Administrator A</description> 
    <role-name>1</role-name> 
</security-role> 
<security-constraint> 
    <display-name>Administrator A</display-name> 
    <web-resource-collection> 
     <web-resource-name>Administratorske datoteke</web-resource-name> 
     <description/> 
     <url-pattern>/a1/*</url-pattern> --> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method>   
    </web-resource-collection> 
    <auth-constraint> 
     <description>Administrator A</description> 
     <role-name>1</role-name> 
     </auth-constraint> 
</security-constraint> 


    <login-config> 

    <auth-method>FORM</auth-method> 
    <realm-name>JDBCRealm</realm-name> 
    <form-login-config> 
     <form-login-page>/prijava.xhtml</form-login-page> 
     <form-error-page>/pogreska.xhtml</form-error-page> 
    </form-login-config> 
</login-config> 

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

<welcome-file-list> 
    <welcome-file>prijava.xhtml</welcome-file> 
</welcome-file-list> 

* это войти в страницу (prijava.xhtml) *

 <div class="slika_za_prijavu"> 

     <h:outputLink id="loginLink" value="javascript:void(0)" onclick="PF('prozor_za_unos').show()" title="prijava"> 
      <p:graphicImage value="/slike/prijava.png" /> 

     </h:outputLink> 

     </div>   

     <p:growl id="growl" showDetail="true" life="3000" /> 

     <p:dialog id="prozor_za_prijavu" header="Prijava" widgetVar="prozor_za_unos" resizable="false"> 

     <h:panelGrid columns="2" cellpadding="5"> 
     <h:outputLabel for="k_ime" value="Korisničko ime:" /> 
     <p:inputText value="#{provjera_prijave.k_ime}" 
       id="k_ime" required="true" label="korisnicko_ime" 
       requiredMessage="Potrebno je upisati korisničko ime!"/> 

     <h:outputLabel for="zaporka" value="Zaporka:" /> 
     <h:inputSecret value="#{provjera_prijave.zaporka}" 
       id="zaporka" required="true" label="zaporka" 
       requiredMessage="Potrebno je upisati zaporku!"/> 

     <f:facet name="footer"> 
      <p:commandButton id="gumb_za_prijavu" value="Prijavi se" update="growl" 
          actionListener="#{provjera_prijave.prijava(actionEvent)}" 
       oncomplete="obrada_zahtjeva_za_prijavu(xhr, status, args)"/> 
     </f:facet> 
     </h:panelGrid> 

     </p:dialog> 
    </h:form> 

это войти в контроллер (provjera_prijave)

общественного недействительными prijava (ActionEvent ActionEvent) бросает IOException {

FacesMessage poruka = null; 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    HttpServletRequest zahtjev = (HttpServletRequest) fc.getExternalContext().getRequest(); 
    try { 
     String pocetna_stranica;    
     zahtjev.login(k_ime, zaporka); 
     HttpSession sesija = zahtjev.getSession(); 
     if (!sesija.isNew()) { 
      sesija.invalidate(); 
      sesija = zahtjev.getSession();         
     } 
     if (zahtjev.isUserInRole("1")) { 
      sesija.setAttribute("trenutni_korisnik",k_ime); 
      pocetna_stranica = "/a1/pocetna_a1.xhtml"; 
      poruka = new FacesMessage(FacesMessage.SEVERITY_INFO, "Dobro došao", k_ime); 
      try { 
       fc.getExternalContext().getFlash().setKeepMessages(true); 
       fc.getExternalContext().redirect(zahtjev.getContextPath()+pocetna_stranica); 

      } 
      catch (IOException ex) { 
       fc.addMessage(null, new FacesMessage("UPOZORENJE!", "Pogreška u izvođenju programa. Nije moguće preusmjeriti stranicu.")); 
      } 
     } 
     else if (zahtjev.isUserInRole("2")) { 

и это гиперссылка, которая находится в моем браузер, когда пользователь с ролью «1» войдет в систему. До этого идет localhost и порт ... ERMP - это приложение n ...

"ERMP/a1/pocetna_a1.xhtml"

здесь пустая страница с источником страницы на страницу входа

Я надеюсь, что вопрос понятен. Когда комментарий веб-ресурс в web.xml все работает Пожалуйста, помогите !! Спасибо

ответ

0

Как вы хотите использовать кот встроенный в (Realm) аутентификации и авторизации, есть несколько вещей, которые вы должны озаботиться.

Во-первых, ваша форма Логин должен быть что-то вроде этого:

<form action="j_security_check" method="post"> 
    <input type="text" name="j_username" placeholder="Login"/> 
    <input type="password" name="j_password" placeholder="Password"/> 
    <input type="submit" value="Sign In" /> 
</form> 

Вы можете использовать primefaces компоненты для сохранения макета. В этом случае вам нужно будет сделать некоторые «javascripting», чтобы определить действие формы, добавленное компонентом JSF h: form. ...

<script> 
jQuery("#form").submit(function() { 
    jQuery(this).attr("action", "j_security_check"); 
    jQuery(loginVar.jqId).attr("name", "j_username"); 
    .... 
}); 
</script> 

Вторая деталь, что вам не нужно будет беспокоиться о входе в систему части, как описано в контроллере авторизации.Как только вы отправите j_username и j_password в j_security_check, все будет работать нормально.

+0

Спасибо! Мне удалось найти нужную страницу, что является улучшением, но я могу сделать это только с одним пользователем ... если я определяю страницу приветствия для пользователя с ролью «1», я могу видеть страницу, но пользователь с ролью «2» не видит page .... знаете ли вы, как определить несколько страниц приветствия в web.xml? – nikolabu

Смежные вопросы