আমি মনে করি আপনি ডিপ্লোয়মেন্ট ডেসক্রিপটর এবং ব্যবহার করে ফর্ম ভিত্তিক প্রমাণীকরণ চান ।j_security_check
আপনি ঠিক একই পূর্বনির্ধারিত ক্ষেত্রের নামগুলি ব্যবহার করে j_usernameএবং j_passwordটিউটোরিয়ালটিতে প্রদর্শিত হিসাবে জেএসএফ এ এটি করতে পারেন ।
যেমন
<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>
ইতিমধ্যে লগইন হয়েছে কিনা তা Userপরীক্ষা করার জন্য আপনি গেটরে অলস লোডিং করতে পারেন Userএবং যদি না থাকে, তবে Principalঅনুরোধে উপস্থিত আছেন কিনা তা পরীক্ষা করে দেখুন এবং তারপরে, তার Userসাথে যুক্ত হয়ে যান 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স্পষ্টত দ্বারা JSF এল অ্যাক্সেসযোগ্য #{auth.user}।
লগআউট করতে একটি করুন HttpServletRequest#logout()(এবং Userবাতিল করুন!)। এর মাধ্যমে HttpServletRequestআপনি জেএসএফ- এর একটি হ্যান্ডেল পেতে পারেন ExternalContext#getRequest()। আপনি স্রেফ পুরোপুরি অবৈধ করতে পারেন।
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "login?faces-redirect=true";
}
অবশিষ্টাংশের জন্য (ব্যবহারকারীর সংজ্ঞা, বিবরণীর বিবরণকারী এবং রাজ্যের ক্ষেত্রে ভূমিকা এবং সীমাবদ্ধতা) কেবল জাভা ইই 6 টি টিউটোরিয়াল এবং সার্ভলেটকন্টেইনার ডকুমেন্টেশনটি যথাযথভাবে অনুসরণ করুন।
আপডেট : আপনি নতুন সার্লেট ৩.০ ব্যবহার করার HttpServletRequest#login()পরিবর্তে একটি প্রোগ্রাম্যাটিক লগইন j_security_checkকরতে ব্যবহার করতে পারেন যা কিছু সার্লেটকন্টেইনারে কোনও প্রেরণকারীর দ্বারা প্রতি-সেয়ে পৌঁছতে পারে না। এক্ষেত্রে আপনি একটি উপযুক্ত জেএসএফ ফর্ম এবং একটি শিম usernameএবং passwordবৈশিষ্ট্য এবং এমন loginপদ্ধতি যা দেখতে দেখতে ব্যবহার করতে পারেন :
<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>
এবং এই ভিউটি স্কপড ম্যানেজ করা শিম যা প্রাথমিকভাবে অনুরোধ করা পৃষ্ঠাটি মনে রাখে:
@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.
}
এই পদ্ধতি Userদ্বারা JSF এল অ্যাক্সেসযোগ্য #{user}।