shiro的hello world
来源:互联网 发布:高校数据采集平台 编辑:程序博客网 时间:2024/06/10 21:23
shiro 安全框架小型而且来说很好用,想比较spring的安全security来讲要简单很多,当然 看开涛老师的博客也能学到很多,当然看海涛老师的博客,个人觉得还是比较乱,当然当你熟悉了shiro在查看开涛老师的shiro进行手册似的查看我觉得非常nice,这里我是参照官方文档搭建的第一个demo,万事开头难,第一hello world运行起来
本项目以Maven进行构建 pom.xml
第一步:引入shiro的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.ksea.shiro</groupId>
<artifactId>shiro-web</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>shiro-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<shiro.version>1.2.4</shiro.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
<scope>runtime</scope>
</dependency>
<!-- Shiro dependencies: -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>shiro-web</finalName>
</build>
</project>
第二步:建立 shiro.ini 这个shiro 官网有说明,其内容以下
[main]
shiro.loginUrl = /login
[users]
zs=123
ls=123
[urls]
/admin/** = authc
/logout = logout
第三步:web.xml中配置shiro的监听
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>org.ksea.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
第四步:我这里是用servlet写的
package org.ksea.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.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/page/login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
Subject subject=SecurityUtils.getSubject();
UsernamePasswordToken upt= new UsernamePasswordToken(username, pwd);
String errMsg=null;
try {
subject.login(upt);
} catch ( UnknownAccountException uae ) {
//此处表示用户名错误
errMsg="该用户不存在!";
} catch ( IncorrectCredentialsException ice ) {
//密码错误
errMsg="该用户密码错误!";
}
catch ( AuthenticationException ae ) {
errMsg="其他错误:"+ae;
}
if(errMsg!=null){
//说明用户验证未能通过
request.setAttribute("errMsg", errMsg);
request.getRequestDispatcher("/WEB-INF/page/login.jsp").forward(request, response);
}else{
String ctx=request.getServletContext().getContextPath();
response.sendRedirect(ctx+"/index.jsp");
}
}
}
这个运行就是一个非常简单的shiro的安全登陆验证 其源码在:https://github.com/ksea55/kseaGitRepository.git
- shiro的hello world
- Shiro简介与Hello World实现
- (二) shiro入门 :输出 hello world
- Shiro入门-hello world和用户认证
- JMX的Hello World
- Hello World 的故事
- 汇编的HELLO WORLD!
- JAVA 的HELLO WORLD
- 汇编语言的Hello world
- Python 的Hello World
- 千奇百怪的Hello World
- Itouch 的Hello world
- 汇编的hello world
- C++ 的Hello World!!!
- 美丽的“Hello, World”
- hello world的秘密
- C++的Hello World
- Android的Hello World
- 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion(转载)
- [Android] Android 视频播放总结
- Linux混杂设备驱动模型
- mysql-python安装时EnvironmentError: mysql_config not found
- React Native 一:开发环境搭建
- shiro的hello world
- HTTP 头部解释
- 全排列
- Impala之Catalogd进程
- Java数据结构篇
- [2016腾讯暑期实习在线笔试题][蛇形矩阵]
- 博客搬迁到博客园了
- Git 本地仓库(Repository)详解
- [Android] Opencv 环境搭建