Java EE / performans kullanıcı kimlik doğrulaması j_security_check kullanarak AKSARAY
Merak ediyorum ne geçerli bir yaklaşımdır ilişkin kullanıcı kimlik doğrulaması için bir web uygulama kullanım AKSARAY 2.0 (ve eğer herhangi bir bileşen var) ve Java EE 6 çekirdek mekanizması (giriş/kontrol izinleri/logouts) ile kullanıcı bilgilerini saklamak bir JPA varlık. Oracle Java EE öğretici bir bit (sadece sunucu uygulamalarına kolları) seyrek.
Buolmadanbambaşka bir çerçeve, Bahar-Güvenlik (acegi) gibi kullanmak, ya da Dikiş, ama umarım mümkünse yeni Java EE 6 platform (web profili) ile sopa çalışıyor.
CEVAP
form based authentication deployment descriptors j_security_check
kullanarak istiyorsun sanırım.
Ayrıca sadece öğretici gösterildiği gibi aynı predefinied alan adları j_username
j_password
kullanarak AKSARAY yapabilirsiniz.
E. g.
<form action="j_security_check" method="post">
<h:outputLabel for="j_username" value="Username" />
<h:inputText id="j_username" />
<br />
<h:outputLabel for="j_password" value="Password" />
<h:inputSecret id="j_password" />
<br />
<h:commandButton value="Login" />
</form>
Ne kadar tembel yükleme User
alıcı kontrol eğer User
zaten giriş yapmış ve eğer değilse, o zaman kontrol edin Principal
şimdiki isteği ve eğer öyleyse, o zaman User
ile ilgili j_username
.
package com.stackoverflow.q2206911;
import java.io.IOException;
import java.security.Principal;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
@ManagedBean
@SessionScoped
public class Auth {
private User user; // The JPA entity.
@EJB
private UserService userService;
public User getUser() {
if (user == null) {
Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
if (principal != null) {
user = userService.find(principal.getName()); // Find User by j_username.
}
}
return user;
}
}
User
belli ki #{auth.user}
AKSARAY EL erişilebilir.
Çıkış yapmak HttpServletRequest#logout()
(User
null olarak ayarlayın!). ExternalContext#getRequest()
AKSARAY HttpServletRequest
tanıtıcı alabilirsiniz. Ayrıca sadece oturumu tamamen geçersiz.
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "login?faces-redirect=true";
}
Kalıntı için (dağıtım tanımlayıcısı ve bölge tanımlayan kullanıcılar, roller ve kısıtlamaları), Java EE 6 öğretici ve servletcontainer belgeleri her zamanki yolunu takip edin.
Güncelleme: ayrıca yeni Sunucu uygulaması 3.0 HttpServletRequest#login()
Mayıs başına değil-se bazı servletcontainers bir memuru tarafından ulaşılabilir olması j_security_check
kullanmak yerine programlı bir giriş yapmak için kullanabilirsiniz. Bu durumda fullworthy AKSARAY formu ve username
password
özellikleri ile fasulye ve bu gibi login
bir yöntemi kullanabilirsiniz:
<h:form>
<h:outputLabel for="username" value="Username" />
<h:inputText id="username" value="#{auth.username}" required="true" />
<h:message for="username" />
<br />
<h:outputLabel for="password" value="Password" />
<h:inputSecret id="password" value="#{auth.password}" required="true" />
<h:message for="password" />
<br />
<h:commandButton value="Login" action="#{auth.login}" />
<h:messages globalOnly="true" />
</h:form>
Bu görüş de başlangıçta istenen sayfa hatırlayan: yönetilen fasulye kapsamlı
@ManagedBean
@ViewScoped
public class Auth {
private String username;
private String password;
private String originalURL;
@PostConstruct
public void init() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
originalURL = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);
if (originalURL == null) {
originalURL = externalContext.getRequestContextPath() "/home.xhtml";
} else {
String originalQuery = (String) externalContext.getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING);
if (originalQuery != null) {
originalURL = "?" originalQuery;
}
}
}
@EJB
private UserService userService;
public void login() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext externalContext = context.getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
try {
request.login(username, password);
User user = userService.find(username, password);
externalContext.getSessionMap().put("user", user);
externalContext.redirect(originalURL);
} catch (ServletException e) {
// Handle unknown username/password in request.login().
context.addMessage(null, new FacesMessage("Unknown login"));
}
}
public void logout() throws IOException {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.invalidateSession();
externalContext.redirect(externalContext.getRequestContextPath() "/login.xhtml");
}
// Getters/setters for username and password.
}
Bu şekilde User
#{user}
AKSARAY EL erişilebilir.
Nasıl web sitesi, TEMEL kimlik doğrula...
Java Temel kimlik Doğrulaması HttpClie...
Java kullanarak kimlik doğrulaması ger...
SQL Server Java EE Web uygulaması Wind...
node.js kimlik doğrulaması için Kullan...