It’s generally considered to be bad practice to use virtual links - apparently they let you do things that break OSPF design paradigm and cause the troubleshooting of LSAs and other things to become more difficult…
I would recommend against redistributing connected routes - in fact, redistributing routes by default is a very bad habit to get into. Routing protocols all treat redistributed routes differently than they treat routes that are “native” to the protocol.
Redistributing routes is definitely something that is normal and has its place, but most newbies to dynamic routing tend to just tell the router to go grab everything it knows, dump it into the protocol, and announce everything. (“Kill them all and let God sort it out”) The destinations of redistributed routes are considered to be “outside” your network, and the ASBR that injects a route is considered to be a gateway to the destination, with some unknown amount of distance to cover after leaving the local network.
Instead of redistributing every /32 into your routing, you should try injecting aggregated routes (pools) into OSPF at each AP.
Of course this means that in general, each user’s IP address should be taken from that specific AP’s pool of addresses. If you run out, then allocate another block to the AP and assign more customers from the new block. If you have a few customers that are exceptions to the block, then advertise those specific /32s into OSPF
Suppose AP1 assigns IP addresses from 10.1.1.0/26 and AP2 assigns them from 10.1.1.64/26
On AP1, create a route type=blackhole dst=10.1.1.0/26 tag=100 and on AP2, create a route type=blackhole dst=10.1.1.64/26 tag=100
On these APs you would then redistribute static in-filter=static2ospf
For route filter static2ospf, make the first rule match tag=100 action=accept
and make the last rule be action=discard
This gives you complete control over which static routes are injected into OSPF and which are just private routes for this router. If you want a static route to go into OSPF, set the tag to 100…
Finally, make sure that you only create OSPF networks for the active interfaces that you want forming adjacencies. Also add networks for any other local ethernet networks that you want to appear in your routing table, but As macguyver suggested, make sure that interfaces are configured as passive where you don’t want adjacencies to form.