web项目整合Shiro框架

1、修改pom.xml文件

  <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-web</artifactId>
      <version>1.3.2</version>
    </dependency>

2、在web中使用shiro时必须配置监听器,web.xml

  参考地址:http://shiro.apache.org/webapp-tutorial.html

  <listener>
        <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
    </listener>

3、在整个web开发中,用户的登录检测一定要有过滤器

  <filter>
        <filter-name>ShiroFilter</filter-name>
        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
        <!-- 指定配置文件的路径 -->
        <init-param>
            <param-name>configpath</param-name>
            <param-value>classpath:shiro.ini</param-value>
        </init-param>
    </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>

  此时web程序就与shiro集成好了

4、创建shiro.ini文件

[main]
#定义本次要基于JDBC实现的Realm的认证的配置类
jdbcRealm=com.wyl.realm.MyRealm

#配置安全管理器所使用的Realm
securityManager.realms=$jdbcRealm

5、创建MyRealm类,完成用户验证

package com.wyl.realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import com.wyl.entity.Member;
import com.wyl.service.MemberLoginService;
/**
 * 自定义用户认证
 * @author wyl
 */
public class MyRealm extends AuthorizingRealm{

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

        System.out.println("1、**************用户登录验证:doGetAuthenticationInfo***************");
        // 1、登录认证的方法需要先执行,用来判断登录的用户信息是否合法
        String username = (String) token.getPrincipal();//取得用户名
        MemberLoginService service = new MemberLoginService();
        //通过用户名获得用户的完整信息
        Member vo = service.get(username);//取得用户信息
        service.close();
        if(vo == null){
            throw new UnknownAccountException("该用户名不存在!!!");
        }else{ //进行密码验证处理
            String password = new String((char[]) token.getCredentials());//取得登录密码
            //将数据库密码与登录密码比较
            if(!password.equals(vo.getPassword())){
                throw new AuthenticationException("密码错误!!!");
            }else{
                AuthenticationInfo auth = new SimpleAuthenticationInfo(username, password, "memberRealm");
                return auth;
            }
        }
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        // TODO Auto-generated method stub
        System.out.println("2、**************用户角色与权限:doGetAuthorizationInfo***************");
        // 1、登录认证的方法需要先执行,用来判断登录的用户信息是否合法
        String username = (String) principals.getPrimaryPrincipal();//取得用户名
        SimpleAuthorizationInfo auth = new SimpleAuthorizationInfo();//定义授权信息的返回数据
        MemberLoginService service = new MemberLoginService();
        auth.setRoles(service.listRolesByMember(username)); //设置角色信息
        auth.setStringPermissions(service.listJurisdictionsByMember(username)); //设置权限信息
        service.close();
        return auth;
    }
}

6、创建LoginServlet类

package com.wyl.servlet;

import java.io.IOException;

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 org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;

@WebServlet("/shiroLogin")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String mid = req.getParameter("mid");
        String password = req.getParameter("password");

        //获取进行用户名和密码验证的接口对象
        Subject subject = SecurityUtils.getSubject();
        //实现身份认证信息保存
        UsernamePasswordToken token = new UsernamePasswordToken(mid,password);
        subject.login(token);
        req.setAttribute("mid", mid);
        req.getRequestDispatcher("/pages/welcom.jsp").forward(req, resp);;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        this.doPost(req, resp);
    }
}

7、在根目录下创建login.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"
            +request.getServerName()+":"
            +request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>shiro登录</title>
</head>
<body>
    <form action="shiroLogin" method="post">
    用户名:<input type="text" name="mid" id="mid">
    密码:<input type="password" name="password" id="password">
    <input type="submit" value="登录">
    <input type="reset" value="重置">
    </form>
</body>
</html>

8、创建/pages/welcom.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
    <h1>welcom</h1>
</body>
</html>

9、结果显示

时间: 2024-10-11 05:12:27

web项目整合Shiro框架的相关文章

Eclipse使用Maven创建Web项目+整合SSM框架

一.准备环境 1.maven:apache-maven-3.5.3 2.jdk:jdk1.8.0_131 3.tomcat:apache-tomcat-7.0.68 二.配置Maven.jdk 1.Window-->Preferences-->Maven-->设置自己的Settings 2.Window-->Preferences-->Java-->Installed JREs-->Add 三.新建Maven项目 1.右击-->New(或者是File--&g

(转) shiro权限框架详解06-shiro与web项目整合(上)

http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springMVC+mybatis,所以我们是基于搭建好的项目进行改造的. 将shiro整合到web应用中 登录 退出 认证信息在页面展现,也就是显示菜单 shiro的过滤器 将shiro整合到web应用中 数据库脚步 sql脚步放到项目中,项目上传到共享的资源中,文章最后给出共享url. 去除项目中不使用shi

(转)shiro权限框架详解06-shiro与web项目整合(下)

http://blog.csdn.net/facekbook/article/details/54962975 shiro和web项目整合,实现类似真实项目的应用 web项目中认证 web项目中授权 shiro缓存 sessionManager使用 验证码功能实现 记住我功能实现 web项目中认证 实现方式 修改CustomRealm 的 doGetAuthenticationInfo 方法,从数据库中获取用户信息,CustomRealm 返回查询到的用户信息,包括(加密后的密码字符串和salt

spring整合shiro框架

上一篇文章已经对shiro框架做了一定的介绍,这篇文章讲述使用spring整合shiro框架,实现用户认证已经权限控制 1.搭建环境 这里不在赘述spring环境的搭建,可以简单的搭建一个ssm框架,整合后进行简单的测试 1.1 添加依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3

实战突击: Java Web项目整合开发(PDF)

实战突击:  Java  Web项目整合开发(PDF)

shiro与Web项目整合-Spring+SpringMVC+Mybatis+Shiro(八)

Jar包 Web.xml中配置shiro的filter <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://ja

007-shiro与spring web项目整合【一】基础搭建

一.需求 将原来基于url的工程改成使用shiro实现 二.代码 https://github.com/bjlhx15/shiro.git 中的permission_shiro 三.去除原项目拦截器 去掉springmvc.xml中配置的LoginInterceptor和PermissionInterceptor拦截器.<mvc:interceptors> 四.pom <project xmlns="http://maven.apache.org/POM/4.0.0"

eclipse搭建maven的web项目(SSM框架)

1.File -> New -> Other,在New窗口中选择 Maven -> Maven Project:点击next 选择项目路径 Usedefault Workspace location默认工作空间 2.选择项目类型 在Artifact Id中选择maven-archetype-webapp 3.输入Group ID和 Artifact ID,以及Package         Group ID一般写大项目名称.Artifact ID是子项目名称         Packag

010-shiro与spring web项目整合【四】缓存Ehcache、Redis

一.Ehcache shiro每次授权都会通过realm获取权限信息,为了提高访问速度需要添加缓存,第一次从realm中读取权限数据,之后不再读取,这里Shiro和Ehcache整合. 1.添加Ehcache的jar包 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.5.3</versi