dsafsdfasdafdsfew 2016-06-05 02:01 采纳率: 100%
浏览 1858

ssh中怎么整合shiro,请大神指点

ssh,struts2加hibernate加spring,要加shiro,要怎么整,有没有比较好的教程
是配在struts上,还是spring上,,,struct2的话。我找的教程都不是整合的,原理是利用struct2的拦截器,跳转到一个用于认证是否登录的action,在里面再调用一个自定义的shiro的realm来实现的,并没有在Web.xml进行配置shiro的拦截器,,,,,,spring的话,我看到好像都是springMVC的

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 12:26
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    首先,你需要确保你的项目已经包含了Spring和Shiro的依赖。如果你使用的是Maven,你可以在pom.xml文件中添加以下依赖:

    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.4.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-web</artifactId>
        <version>1.4.0</version>
    </dependency>
    

    接下来,你需要创建一个名为SecurityConfig.java的类,并在其中设置Shiro的配置信息。这个类应该包含以下内容:

    import org.apache.shiro.config.IniConfigurationSource;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.realm.jdbc.JdbcRealm;
    import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class SecurityConfig {
    
        @Autowired
        private DataSource dataSource;
    
        @Bean(name = "securityManager")
        public SecurityManager securityManager() {
            JdbcRealm realm = new JdbcRealm(dataSource);
            return ShiroProperties.createDefault().setSecurityManager(realm).build();
        }
    
        @Bean(name = "filterChainDefinitionMap")
        public ShiroFilterFactoryBean filterChainDefinitionMap() {
            ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
    
            // 设置过滤规则
            factoryBean.setLoginUrl("/login");
            factoryBean.setUnauthorizedUrl("/unauthorized");
    
            // 设置授权规则
            factoryBean.setSuccessUrl("/");
            factoryBean.setUnauthorizedUrl("/unauthorized");
    
            // 设置权限控制策略
            factoryBean.setFilterChainDefinitions("/* -> /unauthorized, /unauthorized");
    
            return factoryBean;
        }
    }
    

    然后,你需要在你的控制器或Action中调用上述配置。例如,在Controller中的get方法中,你可以这样写:

    @GetMapping("/some-page")
    public String somePage(SecurityContext security) {
        // 获取当前用户
        User user = (User) security.getSubject().getPrincipal();
    
        // 如果用户未登录,则重定向到登录页面
        if (user == null) {
            return "/login";
        }
    
        // 如果用户已登录,则执行一些业务逻辑
        // ...
    
        return "redirect:/some-page";  // 跳转到指定页面
    }
    

    最后,你还需要在web.xml中配置Shiro的拦截器。这通常涉及到将拦截器添加到特定的路径上。

    <servlet>
        <servlet-name>ShiroFilter</servlet-name>
        <servlet-class>org.apache.shiro.web.filter.ShiroFilterServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/shiro/spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ShiroFilter</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    以上就是如何在Spring MVC中集成Shiro的基本步骤。请注意,这只是一个基本的例子,实际的应用可能需要根据你的具体需求进行调整。

    评论

报告相同问题?