文档章节

shrio +springmvc web项目搭建

a
 asd121213
发布于 2015/04/25 21:54
字数 737
阅读 103
收藏 1

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
59
0
spring springmvc mybatis maven 项目整合示例-导航页面

spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途...

noteless
06/29
0
0
springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试

包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml

noteless
2016/02/24
0
0
spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the Modules section of the reference documentation. Their ......

noteless
2016/02/24
0
0
springmvc 项目完整示例03 小结

利用spring 创建一个web项目 大致原理 利用spring的ioc 原理,例子中也就是体现在了配置文件中 设置了自动扫描注解 配置了数据库信息等 一般一个项目,主要有domain,dao,service,controller这几...

noteless
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
28分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
39分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
51分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部