• spring中 shiro logout 配置方式


    有两种方式实现logout
    1. 普通的action中 实现自己的logout方法,取到Subject,然后logout
    这种需要在ShiroFilterFactoryBean 中配置 filterChainDefinitions
    对应的action的url为anon


    # some example chain definitions:
    /index.htm = anon
    /logout = anon
    /unauthed = anon
    /console/** = anon
    /css/** = anon
    /js/** = anon
    /lib/** = anon
    /admin/** = authc, roles[admin]
    /docs/** = authc, perms[document:read]
    /** = authc
    # more URL-to-FilterChain definitions here

    2. 使用shiro提供的logout filter
    需要定义 相应的bean


    然后将相应的url filter配置为logout如下


    # some example chain definitions:
    /index.htm = anon
    /logout = logout
    /unauthed = anon
    /console/** = anon
    /css/** = anon
    /js/** = anon
    /lib/** = anon
    /admin/** = authc, roles[admin]
    /docs/** = authc, perms[document:read]
    /** = authc
    # more URL-to-FilterChain definitions here

    注:anon,authcBasic,auchc,user是认证过滤器,perms,roles,ssl,rest,port是授权过滤器

    关于自定义filter

    我的shiro之旅: 三 浅谈shiro的filter

    分类:shiro|标签: shiro|作者: lhacker 相关|发布日期 : 2014-11-29|热度 : 63°

    前段时间比较懒,项目也有些紧,没有写什么东西。现在再对Shiro做一些整理。上一篇主要介绍了一个完整而又简单的shiro集成到项目的例子,主要是spring项目。这篇文章,想谈一下关于shiro的filter,这需要读者对shiro有一定的理解,至少有用过shiro。

    01

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

    02

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

    03

    ????????``<``property``name``=``"loginUrl"``value``=``"/login"``/>

    04

    ????????``<``property``name``=``"successUrl"``value``=``"/home"``/>

    05

    ????????``<``property``name``=``"unauthorizedUrl"``value``=``"/unauthorized"``/>

    06

    ????????``

    09

    ????????``

    16

    ????????``<``property``name``=``"filterChainDefinitions"``>

    17

    ????????????``<``value``>

    18

    ????????????????``/admin = authc,roles[admin]

    19

    ????????????????``/edit = authc,perms[admin:edit]

    20

    ????????????????``/home = user

    21

    ????????????????``/** = anon

    22

    ????????????``

    23

    ????????``

    24

    ????``

    从上面的配置我们可以看到,当用户没有登录的时候,会重发一个login请求,引导用户去登录。当然,这个login请求做些什么工作,引导用户去那里,完全由开发者决定。successUrl是当用户登录成功,重发home请求,引导用户到主页。unauthorizedUrl指如果请求失败,重发/unauthorized请求,引导用户到认证异常错误页面。

    Filter Name

    Class

    anon

    org.apache.shiro.web.filter.authc.AnonymousFilter

    authc

    org.apache.shiro.web.filter.authc.FormAuthenticationFilter

    authcBasic

    org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter

    logout

    org.apache.shiro.web.filter.authc.LogoutFilter

    noSessionCreation

    org.apache.shiro.web.filter.session.NoSessionCreationFilter

    perms

    org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter

    port

    org.apache.shiro.web.filter.authz.PortFilter

    rest

    org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter

    roles

    org.apache.shiro.web.filter.authz.RolesAuthorizationFilter

    ssl

    org.apache.shiro.web.filter.authz.SslFilter

    user

    org.apache.shiro.web.filter.authc.UserFilter

    以上是shiro的一些Filter,如我们在filterChainDefinitions里配置了/admin=authc,roles[admin],那么/admin这个请求会由 org.apache.shiro.web.filter.authc.FormAuthenticationFilter和 org.apache.shiro.web.filter.authz.RolesAuthorizationFilter这两个filter来处理,其中authc,roles只是filter的别名。如要更改别名,可以通过filters来改变。如上面的配置

    1

    <``span``style``=``"white-space:pre"``>????? <``property``name``=``"filters"``>

    2

    ????????????``<``map``>

    3

    ????????????????``<``entry``key``=``"authc"``>

    4

    ????????????????????``<``bean``class``=``"org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter"``/>

    5

    ????????????????``

    6

    ????????????``

    7

    ????????``

    把PassThruAuthenticationFilter添加别名为authc,这时/admin请求会交给PassThruAuthenticationFilter处理,替换了原来由 FormAuthenticationFilter来处理。

    由此一来,如果有些特殊的请求需要特殊处理,就可以自己写一个filter,添加一个别名,如:

    view source

    print ?

    1

    <``span``style``=``"white-space:pre"``>????? <``property``name``=``"filters"``>

    2

    ????????????``<``map``>

    3

    ????????????????``<``entry``key``=``"new"``>

    4

    ????????????????????``<``bean``class``=``"org.xx.xx.NewFilter"``/>

    5

    ????????????????``

    6

    ????????????``

    7

    ????????``

    请求用/new = new,这样/new请求交由NewFilter来处理。

  • 相关阅读:
    Kmeans
    蓝桥杯备赛第四篇(高级数据结构)
    精准定位——MySQL日志学习的一天【错误、二进制、查询、慢查询】
    TCP协议
    供应化学试剂Fmoc-NH-PEG-NH2,Fmoc-NH-PEG-amine用于材料改性
    MMDeploy理解
    R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用fill_palette函数改变可视化图像的填充色
    springboot+jsp+bootstrap+java问卷调查系统
    uniapp微信小程序用户隐私保护指引弹窗组件
    Listener监听器
  • 原文地址:https://blog.csdn.net/m0_67403013/article/details/126516473