关于CAS服务端登录前ajax访问后台方法被拦截的配置

前两天项目上使用的cas单点登录需要添加微信登录功能,与移动开发组的同事沟通后,发现需要在cas服务端添加二维码生成和对数据库相关操作的代码,在实现真正登录前,通过一定逻辑的ajax请求访问后台自定义的方法,实现二维码生成和相关数据库操作。

去年10月份研究了cas单点登录,目前已经实现了三个客户端+一台cas认证服务的统一门户功能,认证服务器支持个人用户名、身份证号、手机号和密码匹配验证,也支持法人用户名密码登录认证,先如今需要添加二维码扫码登录。研究cas由于知道其底层采用spring webflow结合spring mvc实现的,于是自己定义的方法也使用spring mvc注解的方式实现请求转发。下面按步骤进行配置:

1.在spring-configuration文件夹下添加springmvc-config.xml文件

  因为web.xml中默认配置的是加载spring-configuration路径下的所有xml(/WEB-INF/spring-configuration/*.xml),所以直接在spring-configuration下配置springmvc-config.xml文件。以下为配置内容:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- MVC注解驱动 -->
	<mvc:annotation-driven />
	
	<!-- 配置扫描器,使得@Controller注解生效 -->
	<context:component-scan base-package="com.casit" />
			
</beans>

2.在casLoginView.jsp中任意添加ajax用于访问后台的自定义类和方法

 $("#test").click(function(){
            $.ajax({
                url : "${ctx}/qRCodeOperation/erCodeLogin",
                dataType : "text",
                type : "get",
                success : function(data){
                    console.info(data);
                }
            });
        })
3.后台新增QRCodeOperation类和ERCodeLogin方法,由于使用spring JdbcDAOSupport类自带的JdbcTemplate方法,因此需要在applicationContext.xml中定义jdbcTemplate的bean并注入dataSource,并在使用类中通过spring属性注入的方式将jdbcTemplate实体注入。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/qRCodeOperation")
public class QRCodeOperation {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @RequestMapping("/erCodeLogin")
    @ResponseBody
    public String ERCodeLogin(){
        String usernm = jdbcTemplate.queryForObject("select usernm from sys_user where loginnm=?", String.class, "fagw" );
        System.out.println("usernm : " + usernm);
        return usernm;
    }
}
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name = "dataSource" ref="dataSource" />  
	</bean>

4.由于cas对非法请求都会默认进行拦截,所以在web.xml中配置不拦截的地址栏(注意url-pattern中不能使用*代替,必须使用指定的url路径,我反正试了/qRCodeOperation/*没用)。

<servlet-mapping>
    <servlet-name>cas</servlet-name>
    <url-pattern>/qRCodeOperation/erCodeLogin</url-pattern>
  </servlet-mapping>

至此,就可以通过ajax访问到cas自定义的后台了。


注意:经过测试发现在对springmvc-config.xml中加mvc注解驱动的时候,返回到页面上的中文为乱码,因此修改mvc注解驱动为以下:

<!-- MVC注解驱动 -->
	<mvc:annotation-driven>
		<mvc:message-converters register-defaults="true">
			<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<constructor-arg value="UTF-8" />
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值