欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springMVC+spring 切换springBoot2 注意事项 springJBoss企业应用 

程序员文章站 2022-04-02 23:14:44
...

1.web.xml 迁移

   filter迁移

     /**

  * 注册filter
  *
  * @return
  */
@Bean
 public FilterRegistrationBean filterRegistrationBean() {
     FilterRegistrationBean authenticationFilterbean = new FilterRegistrationBean(new AuthenticationFilter());
     Map<String, String> authenticationFilterInitPara = new HashMap<String, String>();
     authenticationFilterInitPara.put("authUrlPattern", "/auth");
     authenticationFilterInitPara.put("authStatusUrlPattern", "/authStatus");
     authenticationFilterInitPara.put("popupLoginSuccessUrlPattern", "/popupLoginSuccess");
     authenticationFilterbean.setInitParameters(authenticationFilterInitPara);
     authenticationFilterbean.addUrlPatterns("/*");
     return authenticationFilterbean;}

 servlet注册

  @Bean

public ServletRegistrationBean AuthservletRegistrationBean() {
    ServletRegistrationBean authServlet = new ServletRegistrationBean(new AuthenticationServlet(), "/auth");
     authServlet.setLoadOnStartup(2);
    return authServlet;
}
listener注册
@Bean
public ServletListenerRegistrationBean ProviderContextListenerRegistrationBean() {
    ServletListenerRegistrationBean listenerRegistrationBean = new ServletListenerRegistrationBean(new ProviderContextListener());
    return listenerRegistrationBean;
}

    context-param初始化参数

    new ServletContextInitializer() {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("auth-timeout-seconds", "3600");
        servletContext.setInitParameter("auth-code-timeout-seconds", "60");
        servletContext.setInitParameter("request-params-snapshot-timeout-seconds", "300");
        servletContext.setInitParameter("webAppRootKey", "slvcms-admin");
    }
}

    error页面配置

    @Component

@Slf4j
public class ErrorPageConfig implements ErrorPageRegistrar {
    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage e404=new ErrorPage(HttpStatus.NOT_FOUND,"/404.jsp");
        ErrorPage e500=new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,"/404.jsp");
        registry.addErrorPages(e404,e500);
    }
}

拦截器和默认首页配置
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
public void addInterceptors(InterceptorRegistry registry) {
        //注册LoginHandlerInterceptor拦截器
InterceptorRegistration registration = registry.addInterceptor(new LoginHandlerInterceptor());
        //所有路径都被拦截
registration.addPathPatterns("/**");
        InterceptorRegistration httpOnlyInterceptor = registry.addInterceptor(new HttpOnlyInterceptor());
        //所有路径都被拦截
httpOnlyInterceptor.addPathPatterns("/**");
    }

    /**
     * 默认首页设置,当请求时项目地址的时候 返回login
     */
@Override
public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:index.jsp");
    }
}
2.jboss容器需增加配置jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--主要是为了使用应用自己的日志系统 -->
<jboss-deployment-structure>
   <deployment>
      <exclusions>
         <module name="org.apache.log4j"/>
         <module name="org.slf4j" />
         <module name="org.slf4j.impl" />
         <module name="org.slf4j.jcl-over-slf4j" />
         <module name="org.slf4j.ext" />
         <module name="org.jboss.as.jsf" />
         <module name="org.jboss.as.jsf-injection" />
         <module name="com.fasterxml.jackson.core.jackson-core" />
         <module name="com.fasterxml.jackson.core.jackson-annotations" />
         <module name="com.fasterxml.jackson.core.jackson-databind" />
         <module name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8" />
         <module name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310" />
         <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider" />
         <module name="org.jboss.resteasy.resteasy-jackson2-provider" />
         <module name="org.jboss.resteasy.resteasy-jackson-provider" />
         <module name="javax.faces.api" slot="main"/>
         <module name="com.sun.jsf-impl" slot="main"/>
      </exclusions>
   </deployment>
</jboss-deployment-structure>
3.shiro权限配置迁移
新建ShiroConfig类
package com.fh.config;

import com.fh.filter.JwtFilter;
import com.fh.interceptor.shiro.MyCredentialsMatcher;
import com.fh.interceptor.shiro.ShiroRealm;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 用户名
 * @Type ShiroConfig.java
 * @Desc
* @date 2021/2/20 10:11
 */

@Configuration
public class ShiroConfig {
    private static final Logger logger = LoggerFactory
            .getLogger(ShiroConfig.class);

    /**
     * ShiroFilterFactoryBean 处理拦截资源文件过滤器
     * </br>1,配置shiro安全管理器接口securityManage;
     * </br>2,shiro 连接约束配置filterChainDefinitions;
     */
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(
            org.apache.shiro.mgt.SecurityManager securityManager) {
        //shiroFilterFactoryBean对象
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        // 配置shiro安全管理器 SecurityManager
shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 指定要求登录时的链接
shiroFilterFactoryBean.setLoginUrl("/");
        // 登录成功后要跳转的链接
shiroFilterFactoryBean.setSuccessUrl("/main/index");
        // 未授权时跳转的界面;
shiroFilterFactoryBean.setUnauthorizedUrl("/login_toLogin");
        // filterChainDefinitions拦截器
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
        // 配置不会被拦截的链接 从上向下顺序判断
filterChainDefinitionMap.put("/websocket/**", "anon");
        filterChainDefinitionMap.put("/users/**", "anon");
        filterChainDefinitionMap.put("/auth", "anon");
        filterChainDefinitionMap.put("/authStatus", "anon");
        filterChainDefinitionMap.put("/jobDispatcher", "anon");
        // 添加自己的过滤器并且取名为jwt
Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
        filterMap.put("jwt", new JwtFilter());
        filterChainDefinitionMap.put("/**", "jwt");
        shiroFilterFactoryBean.setFilters(filterMap);
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        logger.debug("Shiro拦截器工厂类注入成功");
        return shiroFilterFactoryBean;
    }

    /**
     * shiro安全管理器设置realm认证
     *
     * @return
*/
@Bean("securityManager")
    public DefaultWebSecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 设置realm.
securityManager.setRealm(shiroRealm());
        //注入ehcache缓存管理器;
securityManager.setCacheManager(ehCacheManager());
        return securityManager;
    }

    /**
     * 身份认证realm; (账号密码校验;权限等)
     *
     * @return
*/
@Bean
public ShiroRealm shiroRealm() {
        ShiroRealm shiroRealm = new ShiroRealm();
        shiroRealm.setCredentialsMatcher(new MyCredentialsMatcher());
        return shiroRealm;
    }

    /**
     * ehcache缓存管理器;shiro整合ehcache:
     * 通过安全管理器:securityManager
     *
     * @return EhCacheManager
     */
@Bean
public EhCacheManager ehCacheManager() {
        logger.debug("=====shiro整合ehcache缓存:ShiroConfiguration.getEhCacheManager()");
        EhCacheManager cacheManager = new EhCacheManager();
        cacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");
        return cacheManager;
    }

    /**
     * 下面的代码是添加注解支持
     * @return
*/
@Bean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
        return defaultAdvisorAutoProxyCreator;
    }

    @Bean
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    @Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
        advisor.setSecurityManager(securityManager);
        return advisor;
    }

}