文档章节

shrio +springmvc web项目搭建

a
 asd121213
发布于 2015/04/25 21:54
字数 737
阅读 101
收藏 1
点赞 0
评论 0

1. pom.xml jar 引入

             < dependency>

               < groupId> org.apache.shiro </groupId >

               < artifactId> shiro-all </artifactId >

               < version> 1.2.2</ version >

           </ dependency>

2. web.xml配置filter

      <!-- Shiro配置-->

  <filter >   

    <filter-name >shiroFilter </ filter-name>

    < filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class >

  </filter >

  <filter-mapping >   

    <filter-name >shiroFilter </ filter-name>    

    <url-pattern >/* </ url-pattern>    

  </filter-mapping >

3. 编写验证类

     package com.my.shrio.application;


import java.util.HashSet;
import java.util.List;
import java.util.Set;

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.UsernamePasswordToken;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.my.shrio.domain.User;

@Service
public class MyShiroDbReaml extends AuthorizingRealm {

    @Autowired
    private UserAL UserAl;

    /*
     * 权限认证
     * 
     * @see
     * org.apache.shiro.realm.AuthorizingRealm#doGetAuthorizationInfo(org.apache
     * .shiro.subject.PrincipalCollection)
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
        // 用户名
        String loginName = (String) arg0.fromRealm(getName()).iterator().next();
        // User user = userService.getUserByLoginName(loginName);
        /* 这里编写授权代码 */
        Set<String> roleNames = new HashSet<String>();
        Set<String> permissions = new HashSet<String>();
        if ("admin".equals(loginName)) {
            roleNames.add("admin");
            permissions.add("manager:admin");
        } else {
            roleNames.add("user");
            permissions.add("manager:user");
        }

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        info.setRoles(roleNames);
        info.setStringPermissions(permissions);
        return info;
    }

    @Override
    // 获取认证信息
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {

        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        // 根据用户名去表中查询用户信息      
         User user = UserAl.selectByUserName(token.getUsername());
        // 认证用户身份
        if (user != null) {
            return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
        } else {
            throw new AuthenticationException();
        }
    }

}


4.配置spring集成信息

<? xml version= "1.0" encoding = "UTF-8" ?>

< beans xmlns ="http://www.springframework.org/schema/beans"

       xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:aop ="http://www.springframework.org/schema/aop"

       xmlns:tx ="http://www.springframework.org/schema/tx"

       xmlns:context ="http://www.springframework.org/schema/context"

       xsi:schemaLocation ="

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" >

 

      <bean id= "myShiro" class ="com.my.shrio.application.MyShiroDbReaml" >

      </bean >

 

    <!-- 配置权限管理器 -->

    <bean id= "securityManager" class ="org.apache.shiro.web.mgt.DefaultWebSecurityManager" >

        <!-- ref 对应我们写的realm  MyShiro -->

        < property name= "realm" ref = "myShiro"/>

        <!-- 使用下面配置的缓存管理器 -->

        < property name= "cacheManager" ref ="cacheManager" />

    </bean >

    

    <!-- 配置shiro的过滤器工厂类,id- shiroFilter要和我们在web.xml中配置的过滤器一致 -->

    <bean id= "shiroFilter" class ="org.apache.shiro.spring.web.ShiroFilterFactoryBean" >

        <!-- 调用我们配置的权限管理器 -->

        < property name= "securityManager" ref ="securityManager" />

        <!-- 配置我们的登录请求地址 -->

        < property name= "loginUrl" value = "/app/tologin"/>

        <!-- 配置我们在登录页登录成功后的跳转地址,如果你访问的是非/login地址,则跳到您访问的地址

        <property name="successUrl" value="/index.jsp"/> -->

        <!-- 如果您请求的资源不再您的权限范围,则跳转到/403请求地址 -->

        < property name= "unauthorizedUrl" value ="/app/noperms" />

        <!-- 权限配置 -->

        < property name= "filterChainDefinitions" >

            < value>

                <!-- anon表示此地址不需要任何权限即可访问-->

                /*/login=anon

                / ws/**=anon

                /**/*. css=anon

                /**/*. js=anon

                /**/*. gif=anon

                /**/*. jpg=anon

                /**/*. png=anon

                <!-- roles[admin ]表示访问此连接需要用户的角色为 admin-->

                / app/page/*=roles[admin ]

                <!-- perms [manager:admin]表示访问此连接需要权限为manager:admin的用户  -->

                / app/page/*=perms [manager:admin]

                <!--所有的请求(除去配置的静态资源请求或请求地址为anon的请求)都要通过登录验证,如果未登录则跳到/login-->

                /** = authc

            </ value>

        </ property>

    </bean >

     

    <bean id= "cacheManager" class ="org.apache.shiro.cache.MemoryConstrainedCacheManager" />

    <bean id= "lifecycleBeanPostProcessor" class ="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

     

</ beans>


5.controller中进行验证

     @RequestMapping(value = "/login" , method = RequestMethod.POST )

    public ModelAndView login(HttpServletRequest request) {


        // System.out.println(userService.getUserById(username).getName());


        String result = "login" ;

        // 此处默认有值

        String username = request .getParameter("username" );

        // MD5加密

        // String password =

        // CipherUtil.generatePassword(request.getParameter("password"));

        String password = request .getParameter("password" );

        UsernamePasswordToken token = new UsernamePasswordToken(username password );


        Subject currentUser = SecurityUtils.getSubject();

        try {

            // System.out.println("----------------------------");

            if (!currentUser .isAuthenticated()) {

                token.setRememberMe( true );

                currentUser .login(token );

            }

            // System.out.println("result: " + result);

            result = "index" ;

        } catch (Exception e ) {

            result = "login" ;

        }

        ModelAndView mav = new ModelAndView(result );

        mav.addObject( "account" username );

        return mav ;

    }


© 著作权归作者所有

共有 人打赏支持
a
粉丝 0
博文 9
码字总数 2245
作品 0
东城
请教一个SpringMVC单元测试的问题

我要对一个Spring中的Controller进行测试: 项目用到了Shrio 在Spring中配置如下: web.xml配置如下: 我执行测试类里的testListAvailable()的时候报错: 请大家帮忙看看这个问题怎么解决?谢...

追着太阳晒 ⋅ 2017/09/18 ⋅ 0

maven+springMVC+mybatis+junit详细搭建过程

springMVC+mybatis框架搭建 在上一遍博客中以及讲诉了新建maven项目的流程,现在紧跟上一遍文章,接着搭建spring项目 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什么样的效...

卐字旗下的余晖 ⋅ 2014/02/12 ⋅ 61

基于Spring Boot的登录demo

原文首发于我的博客 本项目基于Spring Boot框架,搭建了一个简单的登录微服务。 Spring Boot相对于传统的SSM(Spring MVC + Mybatis + Spring)框架用起来更加简单,不需要进行复杂的配置,方便...

tikyle ⋅ 05/14 ⋅ 0

maven+springMVC+mybatis+junit详细搭建过程

首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什么样的效果,自己的功能有哪些? (假设效果:项目目录结构清晰,能够查询到本地数据库中的内容。。) 1. 工程目录结构整理清...

梵蒂冈考虑过 ⋅ 2016/08/16 ⋅ 1

Maven搭建SpringMVC+Hibernate项目详解

前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和H...

Airship ⋅ 2016/12/12 ⋅ 0

Maven搭建SpringMVC+Mybatis项目详解

Maven搭建SpringMVC+Mybatis项目详解 前言 搭建Spring+SpringMVC+Mybatis项目。项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库连接池使用druid数据源,该...

风中帆 ⋅ 2015/07/28 ⋅ 1

spring boot简单实现rest服务

问题 最开始我是想使用Spring MVC搭建一个简单的REST服务,去官网看了看教程,现在Spring胆越来越大了,需要我集成一个maven的父项目,我并不愿意继承Spring的父项目。然后,就开始下面的探索...

亚林瓜子 ⋅ 06/12 ⋅ 0

Spring、Spring Boot与Spring MVC

总论 Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的ioc和aop。ioc提供了依赖注入的容器,aop解决了面向横切面的编程;然后在此二者的基础上...

临江仙卜算子 ⋅ 05/08 ⋅ 2

SpringMVC +shrio 不执行userRealm方法??求解

配置文件如下:

咖啡加糖 ⋅ 2017/01/04 ⋅ 1

简化SSM搭建详细分析配置

一直使用SSH2 和 spring boot,最近换工作,使用新框架SpringMVC,带着SSH2的思路学习SpringMVC还是挺容易的,下面分享一下SSM的搭建 总体来说搭建SSM分五步 一:创建maven工程 这里是创建m...

红尾巴的猪 ⋅ 2017/11/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 32分钟前 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 42分钟前 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 59分钟前 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部