第九章,在页面使用标签,第九章页面标签
第九章,在页面使用标签,第九章页面标签
在页面使用标签很简单,最实用的标签是<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下班了。
评论暂时关闭