jsp / servlet,显示管理员,用户和未登录用户的不同链接

时间:2015-02-03 08:23:17

标签: java jsp servlets el

我在这里找到了可以解决我的问题的代码,但我没有任何idead如何工作。

代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Sample Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <c:choose>
        <c:when test="${pageContext.request.isUserInRole('admin')}">
            <p>Content for admin.<p>
        </c:when>
        <c:when test=${pageContext.request.isUserInRole('someRole')}">
            <p>Some content here</p>
        <c:when>
        <c:otherwise>
            <p>Another Content</p>
        </c:otherwise>
    </c:choose>
</body>
</html>

我不知道的是它是如何运作的pageContext.request.isUserInRole('admin')。 我的所有用户和user_roles都在数据库中。 那么pageContext.request.isUserInRole('admin')从哪里获取数据呢? 你能举例说明它是如何工作的吗?我应该如何将用户角色的信息从servlet传递给pageContext.request.isUserInRole('admin')

2 个答案:

答案 0 :(得分:1)

你所说的是Role Based Authentication。您不需要将角色从servlet传递给jsp,而是需要在xml文件中对其进行配置

现在查看request#isUserInRole根据文档执行的操作

  

返回一个布尔值,指示经过身份验证的用户是否   包含在指定的逻辑&#34;角色&#34;中。角色和角色成员资格   可以使用部署描述符定义。如果用户还没有   经过身份验证后,该方法返回false。

关于jsp安全机制的完整tutorial

另见:

答案 1 :(得分:0)

我认为你必须做一个登录页面,然后在登录后,你必须调用一个servlet / controller来检查你的用户凭证(从数据库)然后重定向到上面的页面。您必须在响应中(或在模型中,如果您使用spring-mvc)输入用户角色信息并在jsp中使用它。

我会给你发一个登录弹簧控制器的例子

@Controller
@SessionAttributes({"user"})
public class UsersController {

@Autowired
UsersBo usersBo;

@RequestMapping(value = "/doLogin", method = RequestMethod.POST)
public ModelAndView login(
        @RequestParam(DSTAConstants.PARAM_EMAIL) String email,
        @RequestParam(DSTAConstants.PARAM_PSW) String psw, 
        Model model) {

    try {

        //This is a call to a DAO that find data in the database
        Users user = usersBo.checkLogin(email, psw);

        //If the dao found a User
        if (user != null) {

                //Put the user into the model
                model.addAttribute("user", user);

                return new ModelAndView("mainPage");

        } 

        else {
            model.addAttribute("msg","Utente non Trovato o Password Errata.");
            return new ModelAndView("login");
        }
    } 
    catch (Exception e) {
        model.addAttribute("msg", e.getMessage());
        System.out.println("Eccezione: " + e.getMessage());
        return new ModelAndView("login");
    }

在此代码之后,您可以使用以下代码在jsp中使用“user”:

<%  
    Users user = (Users) session.getAttribute("user");

%>

你可以用这种方式使用user.getRole()

    <% if (user.getRole() == 1) { >% 
        <p>Some content here</p>
    <% } 
       else { 
    %>
       <p>Content for admin</p>
    <% } %>

记住:我的代码使用Spring-MVC ...如果你不使用它,你必须做一些不同的事情