精华内容
下载资源
问答
  • Shiro的两种配置方式

    千次阅读 2017-01-10 18:01:04
    根据官方文档,我这里列举出两种常用的配置方式,一是ini文件配置,二是spring xml文件的配置方式。 二者的配置,基本都是针对Shiro的以下几个常用组件:securityManager,cachManager,Realm,以及对应的链接拦截...

    Apache Shiro是一款Java 安全框架,可以用于完成认证、授权、加密、会话管理、与Web集成、缓存等功能。根据官方文档,我这里列举出两种常用的配置方式,一是ini文件配置,二是spring xml文件的配置方式。
    二者的配置,基本都是针对Shiro的以下几个常用组件:securityManager,cachManager,Realm,以及对应的链接拦截规则(urls)。
    1. shiro.ini文件配置方式
    我所用的是IDEA环境,在resources目录下新建config目录,用于存放相关配置文件,这里的Shiro.ini 文件也放在下面。你也可以放在你自己的目录,只不过要在web.xml指明配置文件的路径(默认为classpath下shiro.ini文件)。
    shiro.ini文件的基本内容:这里的[urls]下anon代表对应链接不需要用户登录以及权限即可访问,authc代表需要用户登录才可以访问,其他标签可查看官方文档,在之后的学习过程中,根据实例再续写。

    [main]
    cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
    securityManager.cacheManager = $cacheManager
    
    myShiroRealm = com.song.shiro.realm.MyRealm
    myShiroRealm.cacheManager = $cacheManager
    
    securityManager.realm = $myShiroRealm
    
    securityManager.rememberMeManager.cipherKey=false
    
    shiro.loginUrl = /admin/login
    shiro.successUrl = /admin/success
    
    [urls]
    /admin/login = anon
    /admin/success = authc
    /other/index = authc
    /logout = logout

    对应地,在web.xml中配置文件加载监听器及对应的Shiro拦截器配置为:

      <context-param>
        <param-name>shiroConfigLocations</param-name>
        <param-value>classpath:config/shiro.ini</param-value>
      </context-param>
      <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>

    2. spring xml文件配置方式:
    spring-shiro.xml文件内容:

        <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
           default-lazy-init="true">
    
        <description>Shiro Configuration</description>
    
        <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"/>
            <property name="loginUrl" value="/admin/index" />
            <property name="successUrl" value="/admin/success" />
            <property name="unauthorizedUrl" value="/error" />
            <property name="filterChainDefinitions">
                <value>
                    /admin/login = anon
                    /admin/success = authc
                    /other/index = authc
                    /logout = logout
                    /** = anon
                </value>
            </property>
        </bean>
        <!-- 用户授权信息Cache -->
        <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
    
        <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
            <property name="realm" ref="myRealm"/>
            <property name="cacheManager" ref="cacheManager" />
        </bean>
        <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    
        <!-- Define the Shiro Realm implementation you want to use to connect to your back-end -->
        <!-- security datasource: -->
        <bean id="myRealm" class="com.song.shiro.realm.MyRealm">
            <property name="cacheManager" ref="cacheManager" />
        </bean>
    
        <!-- Enable Shiro Annotations for Spring-configured beans.  Only run after -->
        <!-- the lifecycleBeanProcessor has run: -->
        <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/>
        <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
            <property name="securityManager" ref="securityManager"/>
        </bean>
    
    </beans>

    对应地,web.xml中加载监听器以及Shiro过滤器的配置如下:

      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/applicationContext.xml,classpath:config/spring-shiro1.xml</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
          <param-name>targetFilterLifecycle</param-name>
          <param-value>true</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>

    3. 说明
    以上两种方式给出的配置,一般来说,对于实际web工程,只需要改动ini中的[urls]部分或者spring-xml中的shiroFilter配置部分。即定义web资源对应的操作控制权限。具体的语法以及分类,在接下来的具体实践中,再根据实例说明。
    另外,配置文件中关于Realm的配置中时使用的MyRealm,这个是自己写的Realm,用于提供用户名称密码、角色、权限等封装信息的接口,以下是测试用例中的具体的实现(来源于网络,测试通过),其具体调用系统调用Shiro用户登录接口(subject.login(user))时触发:

    /**
     * Created by Song on 2016/12/27.
     */
    public class MyRealm extends AuthorizingRealm {
        //这里因为没有调用后台,直接默认只有一个用户("spf","123456")
        private static final String USER_NAME = "spf";
        private static final String PASSWORD = "123456";
    
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            Set<String> roleNames = new HashSet<String>();
            Set<String> permissions = new HashSet<String>();
            roleNames.add("admin");//添加角色
            permissions.add("read");  //添加权限
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames);
            info.setStringPermissions(permissions);
            return info;
        }
    
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
            UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
            if(token.getUsername().equals(USER_NAME)){
                return new SimpleAuthenticationInfo(USER_NAME, MD5Util.MD5(PASSWORD), getName());
            }else{
                throw new AuthenticationException();
            }
        }
    }
    

    测试中用到的login.jsp页面(登录框):这里直接通过action提交表单,便于后台直接跳转页面,当然你也可以采用js Ajax提交请求,这样的话,就只能通过js根据返回的数据体进行页面跳转。

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <html>
    <head>
        <script typet="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
    </head>
    <body>
    <form action="<%=request.getContextPath()%>/admin/checkLogin">
        <input type="text" name="username" ><br><br>
        <input type="password" name="password"><br><br>
        <input type="checkbox" name="rememberMe" value="true"/>Remember Me?<br>
        <button type="submit" id="loginbtn">登录</button>
    </form>
    </body>

    对应的/admin/checkLogin用户登录验证代码如下:

        /**
         * 验证用户名和密码
         * @param  username,String password
         * @return
         */
        @RequestMapping(value="/checkLogin")
        public String checkLogin(String username, String password, ServletRequest request) {
            Map<String, Object> result = new HashMap<String, Object>();
            try{
                UsernamePasswordToken token = new UsernamePasswordToken(username, MD5Util.MD5(password));
                Subject currentUser = SecurityUtils.getSubject();
                if (!currentUser.isAuthenticated()){
                    //使用shiro来验证
                    token.setRememberMe(true);
                    currentUser.login(token);//验证角色和权限
                    //获取本来要访问的网址uri
                    String uri = WebUtils.getSavedRequest(request).getRequestUrl();
                    //去掉工程名shiros
                    if(uri.split("/shiros").length>1)
                        return "redirect:"+uri.split("/shiros")[1];
                }
            }catch(Exception e){
                e.printStackTrace();
            }
            return "redirect:/admin/success";
        }
    展开全文
  • spring配置国际化资源文件的时候,需要注意的地方,自己在配置过程中,遇到了配置路径总是not found的问题。经查找资料,总结如此文所述

    第一种将资源文件放在源码里面:

    那么配置文件信息如下:

         <!-- 读取国际化资源文件 == 资源文件在包里面,路径写全包名-->
        <bean id="messageSource"
            class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>cn/ddx/i18n/messages</value>
                </list>
            </property>
        </bean>


    第二种配置文件在WEB-INF下面自己创建的目录下面:


    那么配置文件信息如下:

        <!-- 读取国际化资源文件 == 资源文件在WEB-INF下面 ,可以配置多个 -->
        <bean id="messageSource"
            class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>/WEB-INF/lang/messages</value>
                </list>
            </property>
        </bean>

    需要注意的是两者配置的class不同,红色字体部分!

    配置文件路径中的“messages”为资源文件名称中_en_US.properties的前面部分,可以自定义。

    展开全文
  • 参考学习: ...诉求:Spring Boot 默认为我们提供了静态资源处理,而有时我们需要自定义资源映射,可定义项目内部目录,也可定义外部目录。此处举例外部目录映射配置。 方法一:通过配置文件配置

    参考学习:
    http://www.zslin.com/web/article/detail/23
    http://blog.csdn.net/catoop/article/details/50501706

    诉求:Spring Boot 默认为我们提供了静态资源处理,而有时我们需要自定义资源映射,可定义项目内部目录,也可定义外部目录。此处举例外部目录映射配置。

    方法一:通过配置文件配置

    在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息:
    作用在application.yml或application.properties
    首先系统有默认配置,其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)

    默认大概意思如下所示(为了和下面进行对比):
    spring:
        mvc:
            static-path-pattern: /**
        resources:
             static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/

    定义 static-path-pattern: /** ,会覆盖默认配置,需要在static-locations添加默认的内部目录和自定义目录,应为

    添加自定义外部目录并覆盖默认
    spring:
        mvc:
            static-path-pattern: /**
        http:
            multipart:
                location: F://preview
        resources:
            static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/, file:${spring.http.multipart.location}

    如果定义 static-path-pattern: /we/**,则访问static-locations里目录时都应加上”/we/”
    spring.mvc.static-path-pattern 只可以定义一个,目前不支持多个逗号分割的方式,

    方法二:通过@Configuration配置

    @Configuration
    public class ApplicationConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            /**
             * 如果我们将/xxxx/** 修改为 /** 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添加目录,
             * 优先级先添加的高于后添加的。
             *
             * 如果是/xxxx/** 引用静态资源 加不加/xxxx/ 均可,因为系统默认配置(/**)也会作用
             * 如果是/** 会覆盖默认配置,应用addResourceLocations添加所有会用到的静态资源地址,系统默认不会再起作用
             */
            registry.addResourceHandler("/**")
                    .addResourceLocations("classpath:/META-INF/resources/")
                    .addResourceLocations("classpath:/resources/")
                    .addResourceLocations("classpath:/static/")
                    .addResourceLocations("classpath:/public/");
            registry.addResourceHandler("/we/**").addResourceLocations("file:F:/preview/");
            super.addResourceHandlers(registry);
        }
    }

    此方法直接写在代码内,同方法一一样,可以覆盖默认配置,添加自定义映射配置,也可以只添加自定义映射配置,不覆盖默认配置。方法二比之方法一更为灵活。

    展开全文
  • SpringBoot 配置Mybatis两种方式

    万次阅读 2018-08-30 09:56:32
    在SpringBoot结合Mybatis使用时,有的人将mapper.xml 存放到resouce的目录下,有的想把Mapper.xml 和接口放到一起,但是这样/就会存在Mapper.xml加载不了,导致方法无法找到,现在咱们看看两种方式配置。...

    目前SpringBoot被各企业广泛使用,在SpringBoot结合Mybatis使用时,有的人将mapper.xml 存放到resouce的目录下,有的想把Mapper.xml 和接口放到一起,但是这样/就会存在Mapper.xml加载不了,导致方法无法找到,现在咱们看看两种方式的配置。

    首先说第一种:

    也就是网上说的最多的一种,添加依赖,我就不细说了。

    1.在application.properties 中添加对xml中对实体对象引用的配置

    2.在application.properties 添加xml在resouces目录下的位置

    如下图

    mybatis.type-aliases-package=com.gao.security.bean
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

    目录结构如下

    3.在springboot 主入口添加注解,里面值为Mapper对应的Java接口类

    @MapperScan("com.gao.security.dao")

    然后第一种配置方式就结束了,你可以正常使用mabatis了。

    接下来,咱们再说第二种,第二种先对更简单些

    优点:无需在application.properties  添加第一种的那种配置,也不用在springboot主入口添加MapperScan注解

    具体配置:

    1.将Mapper和Java接口存放一个目录,如下

    2.只需要在pom.xml 中的build标签中添加resouce资源的配置加载src/main/java 中的xml即可,如下图

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                </resource>
            </resources>
        </build>

    好了,现在两种方式都讲了,具体可以根据自己想法使用哪一种就可以了

    展开全文
  • 一、Servlet的三实现方式 Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。 1、Servlet的第一...
  • MyBatis配置数据源的两种方式

    千次阅读 2017-10-31 23:55:55
    ---------------------siwuxie095               ... 1、配置方式一:配置数据库连接信息到核心配置文件中    在 mybatis-config.xml 中添加如下内容:     version="1.0
  • Spring Boot配置过滤器的两种方式

    千次阅读 2019-09-06 11:12:35
    过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验、权限控制、敏感词过滤等,下面介绍下Spring Boot配置过滤器的两种方式。...
  • spring+hibernate 两种整合方式配置文件

    万次阅读 2016-07-05 02:07:32
    之前的文章都是讲解springmvc+spring+mybatis 的整合,而很少有springmvc+spring+hibernate 因为工作的需要,最近在使用hibernate 所以下面我们来看看 spring整合hibernate的配置...spring整合hibernate 有两种方式
  • Redis持久化的两种方式配置

    千次阅读 2017-11-10 08:45:43
    Redis优秀的性能是由于其将所有的数据都存储在内存中,同样memcached也是这样做的,但是为...Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。这两种方式可以单独使用其中一种,或者混合使用。  R
  • SpringBoot 静态资源映射的两种方式

    千次阅读 2019-08-31 22:33:52
    一、webjars方式映射静态资源文件 我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用SpringBoot项目我们应该将静态资源文件...
  • Android 项目开发完成后我们为了防止别人反编译我们的apk安装包,我们需要对我们开发完的安装包做一些处理,比如代码混淆、加壳、资源混淆、资源加密等,本文要介绍的是微信官方推荐的AndResGuard资源混淆方法。...
  • 第一:config.properties:index.version=v1spring配置文件,加载config.properties: &lt;!-- 获取properties中的值 --&gt; &lt;bean id="configProperties" class="org.spring...
  • Eclipse4.6(neno)配置Tomcat插件的两种方式

    万次阅读 多人点赞 2017-02-17 00:06:17
    Eclipse4.6中Tomcat插件的两种安装形式~
  • springMVC对静态资源放行的两种方式

    千次阅读 2018-08-01 10:55:31
    1、配置对全部资源放行 &lt;!-- 全部资源放行 --&gt; &lt;mvc:default-servlet-handler/&gt; 2、对指定目录下的资源放行 &lt;!-- 对指定目录下的静态资源放行 --&gt; &lt;mvc:...
  • 项目开发过程中,如果一个项目经常发布,那么在打包之前会不断的修改配置文件,这无疑是...方法一:(过滤方式) 目录结构: 第一步、创建配置文件  在项目的src/main/filter目录下创建 development.properties
  • Spring加载properties文件的两种方式

    万次阅读 多人点赞 2016-05-10 19:47:56
     在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置...在Spring中也可以这么做,而且Spring有两种加载properties文件的方式...
  • 加载项目中配置文件的两种方式

    千次阅读 2016-07-15 16:52:16
    分别获取配置文件config.properties文件中的jdbc_url、jdbc_username、jdbc_password的值,并赋值给str1、str2和str3 this.getClass();获取该对象的类类型 this.getClass().getResourceAsStream() 获取该类的...
  • Unity获取文件资源路径的两种方式

    千次阅读 2019-01-16 18:18:15
    参考链接: https://docs.unity3d.com/ScriptReference/Selection.GetFiltered.html ... [MenuItem(&quot;Tools/GetSelectPaths&quot;)] public stat...
  • (7)Dubbo的四种配置方式

    千次阅读 2018-12-11 23:23:38
    Dubbo共有四种配置方式:xml配置、dubbo.properties属性配置、API配置、注解配置。本节将会对这四方式分别做下介绍,同时也会对主要的配置方式给出范例。 一:xml配置 所有配置项分为三大类,参见下表中的"...
  • Spring-两种配置容器

    千次阅读 2016-07-01 20:39:41
    Spring提供了两种容器类型  SpringIOC容器是一个IOC Service Provider。提供了两种容器类型:BeanFactory和ApplicationContext。Spring的IOC容器是一个提供IOC支持的轻量级容器。除了基本的ioc支持,它作为轻量级...
  • 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。 1、RequestDispatcher.forward方法只能将请求转发给同一个...
  • 前两周接了一个项目代码,得知此项目发布到生产和测试环境是手动替换...所以今天总结了两种根据不同环境自动切换配置文件的方式。 我们假设现在有三种环境:development(本地开发) 、 test(测试环境)、production(...
  • c3p0的配置方式分为三,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件
  • c3p0三种配置方式

    万次阅读 2012-12-10 13:02:17
    c3p0的配置方式分为三,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.setters一个个地设置各个配置项 这种方式最繁琐,形式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 831,310
精华内容 332,524
关键字:

两种资源配置方式