第九章,在页面使用标签,第九章页面标签


 在页面使用标签很简单,最实用的标签是<shiro:principal>标签,在jsp页面使用taglib指令导入即可。

 弄个简单的例子来演示一下吧。

 首先是配置文件tag.ini 简单的例子就不用加密了


[main]
authc.loginUrl=/chapter9/login.jsp
[users]
jea=456

[urls]
/login = authc
/logout=logout
 发送/login 请求需要认证,认证页面在/chapter9/login.jsp

<%--
  Created by IntelliJ IDEA.
  User: jay.zhou
  Date: 2018/1/31
  Time: 16:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<form action="/authen" method="post">
  用户名:<input type="text" name="username"><br>
  密码 :<input type="password" name="password"><br>
  <input type="submit" name="提交">
</form>
</body>
</html>

在页面输入帐号密码,发送/authen 请求,去验证数据,数据源就在配置文件中定义了。

帐号是 jea ,密码是 456,验证成功去 success.jsp页面

package me.jay.chapter9;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by jay.zhou on 2018/1/31.
 */
@WebServlet(name="LoginServlet",urlPatterns="/authen")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取输入的帐号密码,省去健壮性判断,这个未来交给框架做
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);
        //将封装用户信息的token进行验证
        boolean isAuthc = login(token);
        if(!isAuthc){
            //重定向到未登录成功页面
            resp.sendRedirect("/chapter8/unauthc.jsp");
            return ;
        }
        req.getRequestDispatcher("/chapter9/success.jsp").forward(req,resp);
    }

    /**
     * 用于验证用户的帐号密码信息是否合法
     *
     * @param token 封装着用户的帐号密码的UsernamePasswordToken
     * @return      用户输入的信息是否合法
     */
    private boolean login(UsernamePasswordToken token) {
        Subject subject = SecurityUtils.getSubject();
        try {
            subject.login(token);
        }catch (Exception e){
            return false;
        }
        return subject.isAuthenticated();
    }
}

登录成功的页面 success.jsp


<%--
  Created by IntelliJ IDEA.
  User: jay.zhou
  Date: 2018/1/31
  Time: 16:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<html>
<head>
    <title></title>
</head>
<body>
  <shiro:principal/>,欢迎你,认证<br>
  <a href="/logout">退出当前用户</a>
</body>
</html>



点击退出当前用户,发送 /logout 请求,在Shiro配置文件中定义了 使用 logout拦截器进行退出当前用户的操作。

如果退出了当前用户,将会默认跳转项目的首页。

在退出了当前用户的情况下,重新发送/login 请求的话,那么需要再次被authc认证拦截器拦截。

如果没有退出,也就是帐号是认证成功的,回到首页再次发送/login请求的话,

认证拦截器authc将不再拦截,此请求将跳转相应的请求页面,我这个例子就不再弄页面了,

报个404下班了。








查看评论

相关内容

    暂无相关文章