SSM Web项目整合 Spring Security & Spring Security的配置方式

ssm的web项目整合就不过多哔哔了,直接整合 Spring Security,接下来将通过xml的方式和Java 代码配置方式来实现

本篇博文使用的Spring Security版本为:4.2.4.RELEASE

目录

环境准备:

配置:

1.使用xml方式: 

2.使用java类来配置:


环境准备:

sql:

-- ----------------------------
-- Table structure for t_sec_member
-- ----------------------------
DROP TABLE IF EXISTS `t_sec_member`;
CREATE TABLE "t_sec_member" (
  "id" int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
  "username" varchar(50) NOT NULL COMMENT '用户名',
  "password" varchar(100) NOT NULL COMMENT '用户密码,加密',
  "email" varchar(50) DEFAULT NULL,
  "phone" varchar(20) DEFAULT NULL,
  "question" varchar(100) DEFAULT NULL COMMENT '找回密码问题',
  "answer" varchar(100) DEFAULT NULL COMMENT '找回密码答案',
  "status" tinyint(1) NOT NULL COMMENT '账户的状态',
  "status_str" varchar(255) DEFAULT NULL COMMENT '账户的状态描述',
  "create_time" datetime NOT NULL COMMENT '创建时间',
  "update_time" datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
  PRIMARY KEY ("id"),
  UNIQUE KEY "user_name_unique" ("username") USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_sec_member
-- ----------------------------
INSERT INTO `t_sec_member` VALUES ('1', 'admin', '$2a$10$qh7Bia2mC8lw5MyrtPz.YOsxOL99N8N2Z8qEm0skWsBwSNof90Z/2', 'admin@happymmall.com', '13800138000', '问题', '答案', '1', null, '2016-11-06 16:56:45', '2019-06-08 15:46:08');
INSERT INTO `t_sec_member` VALUES ('2', 'sxh', '$2a$10$qh7Bia2mC8lw5MyrtPz.YOsxOL99N8N2Z8qEm0skWsBwSNof90Z/2', '123@456.com', '123456789', 'wu', 'wu', '1', null, '2019-03-31 12:58:40', '2019-06-08 15:46:09');
INSERT INTO `t_sec_member` VALUES ('3', 'test', '$2a$10$qh7Bia2mC8lw5MyrtPz.YOsxOL99N8N2Z8qEm0skWsBwSNof90Z/2', '123@456.com', '1383838383838', null, null, '1', 'test账户', '2019-06-09 22:01:47', '2019-06-09 22:01:52');
INSERT INTO `t_sec_member` VALUES ('6', 'dba', '$2a$10$qh7Bia2mC8lw5MyrtPz.YOsxOL99N8N2Z8qEm0skWsBwSNof90Z/2', 'null', '123838383838', null, null, '1', '账户可用', '2019-06-11 14:54:08', '2019-06-11 14:55:29');

-- ----------------------------
-- Table structure for t_sec_member_role
-- ----------------------------
DROP TABLE IF EXISTS `t_sec_member_role`;
CREATE TABLE "t_sec_member_role" (
  "member_id" int(11) NOT NULL,
  "role_id" int(11) NOT NULL,
  "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  KEY "k_role_id" ("role_id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_sec_member_role
-- ----------------------------
INSERT INTO `t_sec_member_role` VALUES ('1', '1', '2019-06-11 13:58:08', '2019-06-11 13:58:08');
INSERT INTO `t_sec_member_role` VALUES ('2', '2', '2019-06-11 13:58:08', '2019-06-11 13:58:08');
INSERT INTO `t_sec_member_role` VALUES ('3', '1', '2019-06-11 14:03:43', '2019-06-11 14:03:43');
INSERT INTO `t_sec_member_role` VALUES ('3', '2', '2019-06-11 14:03:50', '2019-06-11 14:03:50');
INSERT INTO `t_sec_member_role` VALUES ('3', '3', '2019-06-11 14:17:11', '2019-06-11 14:17:11');
INSERT INTO `t_sec_member_role` VALUES ('6', '3', '2019-06-11 14:55:03', '2019-06-11 14:55:59');

-- ----------------------------
-- Table structure for t_sec_role
-- ----------------------------
DROP TABLE IF EXISTS `t_sec_role`;
CREATE TABLE "t_sec_role" (
  "id" int(11) NOT NULL,
  "role_name" varchar(50) NOT NULL COMMENT '角色名称',
  "role_desc" varchar(50) DEFAULT NULL COMMENT '角色描述',
  "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  "update_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY ("id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of t_sec_role
-- ----------------------------
INSERT INTO `t_sec_role` VALUES ('1', 'ROLE_ADMIN', '超级管理员角色', '2019-06-11 13:59:53', '2019-06-11 15:24:50');
INSERT INTO `t_sec_role` VALUES ('2', 'ROLE_MANAGER', '普通管理员角色', '2019-06-11 13:59:53', '2019-06-11 15:24:53');
INSERT INTO `t_sec_role` VALUES ('3', 'ROLE_DBA', '数据库管理员', '2019-06-11 13:59:53', '2019-06-11 15:24:55');
INSERT INTO `t_sec_role` VALUES ('4', 'ROLE_ORDINARY', '普通账户角色', '2019-06-11 14:07:22', '2019-06-11 15:24:59');
INSERT INTO `t_sec_role` VALUES ('5', 'ROLE_TEMP', '临时的账户角色', '2019-06-11 14:11:16', '2019-06-11 15:25:03');


# 根据username来查询对应的权限:
SELECT
	r.id,
	r.role_name,
	r.role_desc,
	r.create_time,
	r.update_time
FROM
	t_sec_role AS r
LEFT JOIN t_sec_member AS m ON m.username = 'admin'
INNER JOIN `t_sec_member_role` AS mr ON m.id = mr.member_id
AND mr.role_id = r.id;

Spring Security的依赖,maven座标:

    <properties>
        <!-- spring版本号 -->
        <spring.version>4.3.3.RELEASE</spring.version>
        <security.version>4.2.4.RELEASE</security.version>
        <!-- log4j日志文件管理包版本 -->
        <slf4j.version>1.7.7</slf4j.version>
        <log4j.version>1.2.17</log4j.version>

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>${security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-cas</artifactId>
            <version>${security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>${security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>${security.version}</version>
        </dependency>
    </dependencies>

登录的主要逻辑:

@Service
public class MemberServiceImpl implements IMemberService {
    @Autowired(required = true)
    private MemberMapper memberMapper;
    @Autowired(required = true)
    private RoleMapper roleMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if(StringUtils.isEmpty(username)) {
            throw new BadCredentialsException("用户名不能为空");
        }

        Member member = memberMapper.findByUserName(username);
        if (member == null) {
            throw new BadCredentialsException("用户名不存在");
        }

        return new User(username, member.getPassword(), getAuthorities(username));
    }

    private ArrayList<? extends GrantedAuthority> getAuthorities(String username) {
        List<Role> roles = roleMapper.selectByUsername(username);
        ArrayList<SimpleGrantedAuthority> list = new ArrayList();
        for (Role item : roles) {
            list.add(new SimpleGrantedAuthority(item.getRoleName()));
        }
        return list;
    }
}

 

 配置:

以下的两种配置方式都没有将使用 Java 类的配置方式来替换 web.xml,仍保留了web.xml。

1.使用xml方式: 

web.xml中必须配置:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

security的配置,这个配置需要被加到容器中,spring-security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="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-4.3.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-4.2.xsd">

    <!--将这些资源路径设置为不被拦截-->
    <http security="none" pattern="/html/login.html"/>
    <http security="none" pattern="/html/failure.html"/>
    <http security="none" pattern="/css/**"/>
    <http security="none" pattern="/plugin/**"/>
    <http security="none" pattern="/error/**"/>

    <!--页面的拦截规则
    use-expressions:是否使用SPEL表达式,默认是true
    -->
    <http auto-config="true" use-expressions="false">
        <!--路径'/admin/*'需要权限ROLE_ADMIN-->
        <!--<security:intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>-->
        <!--以"/user"开头的所有路径需要ROLE_USER权限-->
        <!--<security:intercept-url pattern="/user/**" access="ROLE_USER"/>-->

        <!--配置需要拦截的url,pattern:拦截路径,access:允许访问的权限-->
        <intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>

        <!--
            login-page="/login.html":配置自定义的登录页面login.html
            login-processing-url="/login":表示登录时提交的地址为"/login"
            username-parameter:表示登录时用户名使用的是哪个参数
            password-parameter:表示登录时密码使用的是哪个参数
            default-target-url:
                默认情况下,在登录成功后会返回到原本受限制的页面
                如果用户是直接请求登录页面,登录成功后默认情况下会跳转到当前应用的根路径,即欢迎页面
                default-target-url 属性可以指定,用户直接访问登录页面并登陆成功后跳转的页面
                如果想让用户不管是直接请求登录页面,还是通过 Spring Security 引导过来的,登录之后都跳转到指定的页面,可以使用 always-use-default-target 属性为 true 来达到这一效果
            authentication-success-handler-ref:
                对应一个 AuthencticationSuccessHandler 实现类的引用
                登录认证成功后会调用指定 AuthenticationSuccessHandler 的 onAuthenticationSuccess 方法,在此方法中进行登陆成功后的处理
                此时 default-target-url 失效
            authentication-failure-url:
                指定登录认证失败后跳转的页面
                默认情况下登录失败后会返回登录页面
                登录失败后跳转的页面,也需放行,否则又会被重定向到登录页面。
            authentication-failure-handler-ref:
                对应一个用于处理认证失败的 AuthenticationFailureHandler 实现类。
                指定了该属性,Spring Security 在认证失败后会调用指定 AuthenticationFailureHandler 的 onAuthenticationFailure 方法对认证失败进行处理
                此时 authentication-failure-url 属性将不再发生作用。
            authentication-success-forward-url="/success.html":登录认证成功后转发的页面success.html
            authentication-failure-forward-url="/failure.html":登录认证失败后的转发页面为failure.html

        配置了转发后就不会走这个默认的url
        -->
        <form-login login-page="/html/login.html"
                    login-processing-url="/login"
                    default-target-url="/html/success.html"
                    username-parameter="username"
                    password-parameter="password"
                    authentication-failure-forward-url="/html/failure.html"
                    authentication-success-forward-url="/html/success.html"
        />
        <!--指定使用默认登出页面,登出后跳转到/login?logout页面-->
        <!--<logout logout-success-url="/login?logout"/>-->
        <!--指定登陆认证成功后,对于没有权限的页面跳转到/403路径-->
        <!--<access-denied-handler error-page="/error/403"/>-->

        <!--会话管理-->
        <session-management session-fixation-protection="none">
            <!--
                max-sessions="1":同一用户只能在一个浏览器登录,当尝试在其他浏览器登陆时将被拒绝
                error-if-maximum-exceeded="true":当设置了此属性,尝试在其他浏览器登录时,则原会话将被终止,将在新窗口建立新会话
            -->
            <concurrency-control max-sessions="1"/>
        </session-management>

        <!--关闭csrf跨域-->
        <csrf disabled="true"/>
        <!--注销登录-->
        <!--<logout invalidate-session="true" logout-success-url="/login.html" logout-url="/logout"/>-->
    </http>

    <!--认证管理器-->
    <authentication-manager>
        <authentication-provider user-service-ref="userService">
            <password-encoder ref="passwordEncoder"/>
            <!--
            <user-service>
                <user name="admin" password="admin" authorities="ROLE_USER,ROLE_ADMIN"/>
                <user name="sxh" password="passwd" authorities="ROLE_USER"/>
            </user-service>
            -->
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
    <beans:bean id="userService" class="com.sxh.study.service.impl.MemberServiceImpl" >
        <intercept-methods>

            <protect access="ROLE_USER" method="find*"/>
            <protect access="ROLE_USER" method="query*"/>
            <protect access="ROLE_ADMIN" method="add*"/>
            <protect access="ROLE_ADMIN" method="update*"/>
            <protect access="ROLE_ADMIN" method="delete*"/>

        </intercept-methods>
    </beans:bean>
</beans:beans>

 

2.使用java类来配置:

若你的web.xml中配置了springSecurityFilterChain,则需要删除或者注释。

否则会抛出异常:Caused by: java.lang.IllegalStateException: Duplicate Filter registration for 'springSecurityFilterChain'.

<--
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
-->
  • 写一个类来继承 WebSecurityConfigurerAdapter,此类就代替了spring-security.xml的配置。同样spring-security.xml配置文件不能被扫进容器中,

    否则会抛出异常:Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'org.springframework.security.authenticationManager': Requested bean is currently in creation: Is there an unresolvable circular reference?


@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Resource
    private IMemberService memberService;

    @Override
    public void configure(WebSecurity web) throws Exception {
        // 设置不拦截规则
        web.ignoring().antMatchers("/error/**",
                "/css/**",
                "/help/**",
                "/img/**",
                "/js/**",
                "/html/login.html",
                "/html/failure.html",
                "/res/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        /**
         * authorizeRequests()  通过 ExpressionUrlAuthorizationConfigurer 去配置基于 URL 请求地址的权限控制,它支持权限表达式,默认是UrlAuthorizationConfigurer
         * formLogin()          对应表单认证相关的配置
         * logout()             对应了注销相关的配置
         * httpBasic()          可以配置basic登录
         * etc
         * sessionManagement()  session管理
         */
        http
                .authorizeRequests()
                    .antMatchers("/resources/**", "/html/login.html", "/html/failure.html").permitAll()
                    .antMatchers("/admin/**").hasRole("ADMIN")
                    .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
                    /*
                    anyRequest:任何的请求
                    authenticated:认证
                    */
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .usernameParameter("username")
                    .passwordParameter("password")
                    .successForwardUrl("/html/success.html")
                    .failureForwardUrl("/html/failure.html")
                    .loginPage("/html/login.html")
                    .loginProcessingUrl("/login")
                    .permitAll()
                    .and()
                /*
                // 定义登录认证失败后执行的操作
                .failureHandler(this.authenticationFailureHandler())
                // 定义登录认证曾工后执行的操作
                .successHandler(this.authenticationSuccessHandler());
                */
                .logout()
                    .logoutUrl("/logout")
                    .logoutSuccessUrl("/html/login.html")
                    .invalidateHttpSession(true)
                    .deleteCookies("JSESSIONID")
                    .permitAll()
                    .and()
                .httpBasic()
                    .disable()
                // 禁用 CSRF
                .csrf()
                    .disable()
                // session管理
                .sessionManagement()
                    .sessionFixation().none().maximumSessions(1);
    }

    /**
     * 登录认证配置
     */
    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(memberService)
                .passwordEncoder(this.bCryptPasswordEncoder());
    }


    @Bean(name = "bCryptPasswordEncoder")
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
  • 需要一个类来继承AbstractSecurityWebApplicationInitializer,否则此过滤器是不会起作用的。
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityWebApplicationInitializer
        extends AbstractSecurityWebApplicationInitializer {
    /*
    spring或者springmvc中会自动将此类注入到父类中
    若当前环境没有使用Spring或SpringMVC,则需要将WebSecurityConfig(SpringSecurity配置类)传入超类,以确保获取配置,并创建springcontext
    public SecurityWebApplicationInitializer() {
        super(WebSecurityConfig.class);
    }
    */
}
  • 需要将security的配置类加到spring容器中,不然会抛出找不到springSecurityFilterChain这个bean的定义异常

如果你使用Java类配置的方式替换了 web.xml,则需要修改 getRootConfigClasses() 方法,添加 WebSecurityConfig.class:

@Override
protectedClass<?>[]getRootConfigClasses(){
    return newClass<?>[]{ ApplicationConfig.class, WebSecurityConfig.class};
}

 否则就用其他你所知道的方式将配置类 load 到 Spring 容器中,如:通过组件扫描:

<context:component-scan base-package="a.b.c.package" />

 

 
  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
### 回答1: SSM指的是Spring+SpringMVC+MyBatis这一组合,而Spring SecuritySpring框架中用于安全认证和授权的模块。将SSM整合Spring Security,可以在SSM应用中提供更加完善的安全控制和认证功能。 具体的实现过程包括以下几个步骤: 1. 添加Spring Security依赖:在pom.xml文件中添加Spring Security的依赖,如下所示: ```xml <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.4.2</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.4.2</version> </dependency> ``` 2. 配置Spring Security:在Spring配置文件中配置Spring Security,包括认证管理器、用户详情服务、密码加密方式、安全过滤器链等内容。 3. 编写登录页面和控制器:编写用户登录页面和控制器,用户在登录页面输入用户名和密码后,控制器将用户输入的信息交给Spring Security进行认证。 4. 配置安全规则:根据业务需求,配置安全规则,例如需要登录才能访问某些资源,或者某些资源只有特定的用户角色才能访问等。 5. 测试:启动应用,测试登录、授权等功能是否正常。 通过以上步骤,就可以将Spring Security整合SSM应用中,提供更加完善的安全控制和认证功能。 ### 回答2: ssm整合springsecurity是指将SpringSecurity框架与SSM框架进行集成,实现对用户认证和授权的支持,保护Web应用程序中的资源。 具体来说,SSM框架中的Web应用程序可以使用SpringSecurity框架提供的安全机制,从而可以很好地保护应用程序中的敏感信息。此外,SpringSecurity还提供了一套完整的用户认证和授权框架,可以自定义实现用户登录、密码验证、用户授权等功能。 要实现SSM整合SpringSecurity,需要进行以下几个步骤: 1. 在pom.xml文件中添加spring-security-core和spring-security-config依赖,具体依赖根据项目需求而定。 2. 在Spring MVC的配置文件中添加SpringSecurity配置信息,如用户权限的设置、HTTPS的启用以及记录用户登录日志等。 3. 在web.xml文件中添加SpringSecurityFilter配置信息。 4. 编写实现用户认证和授权的Java类,如自定义认证管理器、用户详细信息服务、密码加密服务等。 5. 编写安全相关的页面和控制器,如登录页面、注册页面、注销页面和授权页面等。 在SSM整合SpringSecurity的过程中,需要注意以下几点: 1. SpringSecurity框架提供了多种用户认证和授权的方式,开发者需要根据需求选择最适合的。 2. 在实现用户认证和授权的Java类中,需要注意代码的可读性、可维护性和安全性。 3. 在页面和控制器中,需要对用户输入的数据进行验证和过滤,防止SQL注入、跨站脚本攻击等安全问题。 总的来说,SSM整合SpringSecurity可以很好地提高Web应用程序的安全性,保护用户信息不被恶意攻击者利用,并且可以轻松地实现用户认证和授权等功能,为应用程序提供更好的用户体验。 ### 回答3: SSM是指SpringSpringMVC和Mybatis三个框架的整合Spring SecuritySpring的安全框架。对于SSM整合Spring Security,可以按照以下步骤进行。 1.在Spring配置文件中添加以下内容: ``` <!--启用Spring Security--> <security:http auto-config="true"> <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> <security:intercept-url pattern="/user/**" access="ROLE_USER" /> <security:form-login login-page="/login" username-parameter="username" password-parameter="password" /> <security:logout logout-success-url="/logout" /> </security:http> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="admin" password="admin123" authorities="ROLE_ADMIN" /> <security:user name="user" password="user123" authorities="ROLE_USER" /> </security:user-service> </security:authentication-provider> </security:authentication-manager> ``` 2.在SpringMVC的配置文件中添加以下内容,通过@Autowired注解将上面的bean引入: ``` <!--开启注解扫描--> <context:component-scan base-package="com.example.controller" /> <!--启用Spring Security--> <security:global-method-security pre-post-annotations="enabled" /> <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"> <security:filter-chain-map path-type="ant"> <security:filter-chain pattern="/login" filters="authenticationProcessingFilter" /> <security:filter-chain pattern="/logout" filters="logoutFilter" /> <security:filter-chain pattern="/**" filters="basicAuthenticationFilter" /> </security:filter-chain-map> </bean> <bean id="authenticationProcessingFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"> <property name="authenticationManager" ref="authenticationManager" /> <property name="authenticationSuccessHandler"> <bean class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> <property name="defaultTargetUrl" value="/admin/index" /> </bean> </property> <property name="authenticationFailureHandler"> <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> <property name="defaultFailureUrl" value="/login?error=true" /> </bean> </property> <property name="usernameParameter" value="username" /> <property name="passwordParameter" value="password" /> </bean> <bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter"> <constructor-arg value="/login" /> <constructor-arg> <bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" /> </constructor-arg> </bean> <bean id="basicAuthenticationFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter"> <property name="authenticationManager" ref="authenticationManager" /> <property name="authenticationEntryPoint"> <bean class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint"> <property name="realmName" value="Spring Security Application" /> </bean> </property> </bean> <security:authentication-manager id="authenticationManager"> <security:authentication-provider user-service-ref="userDetailsService" /> </security:authentication-manager> <bean id="userDetailsService" class="com.example.service.MyUserDetailsService" /> ``` 3.在Mybatis的配置文件中,为所有需要授权的Mapper接口添加以下内容: ``` @Secured("ROLE_USER") ``` 其中ROLE_USER需要在Spring配置文件中定义。 通过以上步骤,就可以在SSM框架中整合Spring Security实现安全认证和权限控制了。在实际开发中,还需要根据具体的业务需求和系统架构进行定制,包括自定义认证和授权方式、注销登录、记住密码、登陆超时等。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值