一、介绍

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

  • Guest 标签:用户没有身份验证时显示相应信息,即游客访问信息;
  • User 标签:用户已经身份验证/记住我登录后显示相应的信息;
  • Authenticated 标签:用户已经身份验证通过,即 Subject.login 登录成功,不是记住我登录的。
  • notAuthenticated 标签:用户没有身份验证通过,即没有调用 Subject.login 进行登录,包括记住我自动登录
  • 的也属于未进行身份验证。
  • principal 标签 显示用户身份信息,默认调用 Subject.getPrincipal()获取,即 Primary Principal。
  • hasRole 标签 如果当前 Subject 有角色将显示 body 体内容。
  • lacksRole 标签 如果当前 Subject 没有角色将显示 body 体内容。
  • hasAnyRoles 标签 如果当前 Subject 有任意一个角色(或的关系)将显示 body 体内容。
  • hasPermission 标签 如果当前 Subject 有权限将显示 body 体内容。
  • lacksPermission 标签 如果当前 Subject 没有权限将显示 body 体内容。
  • WEB-INFO/shiro.ini
[main]
authc.loginUrl = /login [users]
admin=123,admin
user1=456,user
zs=159 [roles]
admin=admin:*,users:*
user=users:* [urls]
/admin/** = authc,roles[admin]
/users/list.jsp=authc,perms[users:list1]
/users/**=authc
/login.jsp = anon
/logout=logout
  • url为“/login”的servlet
package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject; /**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/commons/login.jsp").forward(request, response);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String userName = request.getParameter("username");
String passWord = request.getParameter("password"); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(userName, passWord);
String emsg = null;
try { subject.login(token); } catch (UnknownAccountException e) {
emsg = "用户名错误";
} catch (IncorrectCredentialsException e) {
emsg = "密码错误";
} catch (AuthenticationException e) {
emsg = "其他异常=" + e.getMessage();
} if (emsg != null) {
// 说明有异常
request.setAttribute("emsg", emsg);
request.getRequestDispatcher("/commons/login.jsp").forward(request, response);
}else{
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} }
  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String path = request.getContextPath();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2 style="color: red">
welcome
<shiro:principal></shiro:principal>
</h2>
<shiro:guest>
<a href="<%=path%>/login">用户登录</a>
</shiro:guest>
<shiro:user>
<shiro:hasPermission name="users:add">
<a href="<%=path%>/users/add.jsp">新增用户</a>
</shiro:hasPermission>
<shiro:hasPermission name="users:list">
<a href="<%=path%>/users/list.jsp">用户列表</a>
</shiro:hasPermission>
<shiro:hasRole name="admin">
<a href="<%=path%>/admin/admin.jsp">管理界面</a>
</shiro:hasRole>
<a href="<%=path%>/logout">退出登录</a>
</shiro:user> </body>
</html>

结果:

最新文章

  1. AVA数据库连接池.
  2. Leetcode 58 Length of Last Word 难度:0
  3. 浏览器css bug及bug解决方法
  4. redis 配置文件 append only file(aof)部分---数据持久化
  5. 开发设计模式(六)多例模式(Multition Pattern)
  6. winRAR将单独文件分别压缩打包
  7. spring-security 配置文件
  8. 天天果园,中粮我买网等生鲜APP竞品分析
  9. jmeter 压测最近的心得体会
  10. Java描述数据结构之链表的增删改查
  11. JQ-bootstrap我的开源前端框架
  12. Android为TV端助力 MVP设计模式!
  13. QML学习笔记(三)-引入Font-awesome
  14. OpenStack实践系列③镜像服务Glance
  15. C语言第六讲,数组
  16. SQL注入方法之:获取列名
  17. bzoj3491: PA2007 Subsets
  18. python---协程理解
  19. Android -- 点击双下返回退出程序
  20. “之”字形输出二叉树 python

热门文章

  1. Vue学习手记03-路由跳转与路由嵌套
  2. Flutter移动电商实战 --(41)详细页_数据接口的调试
  3. pecl和pear 的区别和联系
  4. python @classmethod
  5. 分享一款颜色神器ColorSchemer Studio
  6. PorterDuffXfermode之PorterDuff.Mode.DST_IN
  7. jar启动脚本shell
  8. ES6深入浅出-1 新版变量声明:let 和 const-3.视频 相关面试题
  9. java导入excel很完美的取值的方法
  10. CentOS7下搭建zabbix监控(三)——Zabbix监控服务配置