Java EE 6中的编程身份验证

时间:2010-05-14 09:20:46

标签: java security java-ee java-ee-6 rbac

是否可以在Java EE 6中以编程方式用户身份验证

让我解释一下更多细节:

我有一个使用Servlets和hibernate的现有Java SE项目;我手动管理所有身份验证和访问控制:

class Authenticator {
    int Id
    string username
}

Authenticator login(string username, string password) ;

void doListData(Authenticator auth) {
    if (isLoggedIn(auth)) listData();
    else doListError
}

void doUpdateData (Authenticator auth) {
    if (isLoggedAsAdmin(auth)) updateData() ;
    else doListError();
}

void doListError () {
    listError() ;
}

我在这个项目中集成了J2ee / jpa / servlet 3 / ...(Glassfish 3)。

我见过像:

这样的语录
@RolesAllowed ("viewer")
void doListdata (...) {
    istData() ;
}

@RolesAllowed("admin")
void doUpdateData (...) {
    updateData() ;
}

@PermotAll
void dolisterror () {
    listerror() ;
}

如何我可以在login()中手动说明我的用户是管理员和/或查看者角色吗?

3 个答案:

答案 0 :(得分:1)

首先确保您使用的是Servlet 3.0 / 3.1。 Servlet 2.4没有登录方法

    @WebServlet(name="LoginServlet", urlPatterns={"/LoginServlet"})
    public class TutorialServlet extends HttpServlet {
      protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String user = request.getParameter("user");
        String password = request.getParameter("password");
        //TODO check is user and password not null

        try (PrintWriter out = response.getWriter();){
           request.login(user, password);
           //perhaps redirect to another page on success
        } catch (ServletException e) {
            //perhaps redirect to another page to login failure
            throw new ServletException(e);
        } 
      }
    }

答案 1 :(得分:0)

答案 2 :(得分:0)

感谢你的激光,我花了一些时间来理解它,但你是对的,

login(java.lang.String user, java.lang.String password) 

是我想要做的。我需要登录一个特定的角色,而不是登录我的用户:

login("admin", "admin") ;
...

:)